c-web程序集如何分配内存地址



当运行下面的C代码时,我每次都会得到不同的var地址值,这正是人们所期望的。

int main()
{
int var = 5;
printf("var: %dn", var);
printf("address of var: %pn", &var);  
printf("address of var: %dn", &var);  
return 0;
}

但是,如果我使用emsciption将C转换为wasm并运行它,那么每次内存地址的值都是相同的。web程序集硬编码内存地址吗?

我试着读了一遍,但没有找到一个直截了当的答案,https://www.cs.uaf.edu/courses/cs301/2014-fall/notes/memory/,https://ariya.io/2019/05/basics-of-memory-access-in-webassembly

在正常执行中,进程的地址空间将被随机化,以缓解某些漏洞(这被称为地址空间布局随机化,ASLR(。这包括主堆栈地址以及全局变量、只读变量等。

WASM还没有实现这样的缓解措施,堆栈紧跟在全局变量之后,全局变量本身也没有随机化。wasm-ld,WebAssembly链接器也有一个选项(--stack-first(将其放在全局数据之前,但它仍然是静态的。

请参阅本文以阅读有关WebAssembly中缺少安全缓解措施的更多信息:https://www.usenix.org/system/files/sec20-lehmann.pdf本文第3.3节讨论了ASLR的不足。

相关内容

  • 没有找到相关文章

最新更新