【发布时间】:2017-09-24 06:04:55
【问题描述】:
我目前正在玩弄通过 LLVM 编译的 WebAssembly,但我还没有设法理解堆栈/堆栈指针以及它与整体内存布局的关系。
我了解到我必须使用s2wasm 和--allocate-stack N 来使我的程序运行,我认为这基本上是将(data (i32.const 4) "8\00\00\00")(N=8)添加到我生成的废品中,二进制部分显然是指向内存偏移量的指针,i32 常量是它在线性内存中的偏移量。
不过,我不太明白的是,为什么指针的值为56(N=8)以及该值与内存中堆栈的确切区域的关系,在我的情况下,当前看起来像:
0-3: zero
4-7: 56
7-35: other data sections
36-55: zeroes
56-59: zero
我知道我可能更适合“只使用 emscripten”,但我也想了解这一点。
- 堆栈指针是否始终存储在线性内存中的偏移量 4 处?
- 它的初始值是如何计算的? (与数据后的下一个偏移量%16==0 + N 对齐?)
- 之前存储了什么,之后它指向的偏移量是什么?
【问题讨论】:
标签: webassembly