【发布时间】:2020-09-29 06:34:13
【问题描述】:
在我的汇编代码中,我像这样初始化堆栈
在 .text 部分中,我加载了一个指向堆栈的指针
mov esp, stack_space
在 .bss 部分,我分配了 8192 字节并像这样加载堆栈
resb 8192
stack_space:
我不完全了解我的堆栈占用的内存区域。
据我所知,堆栈相对于 esp 正在下降。
换句话说,如果 esp 指向 0x3000 并且它的大小是 8192 字节,那么堆栈将位于从 0x1000 到 0x3000 的范围内。还是不行?
完整代码here
【问题讨论】:
-
是的,但是堆栈指针几乎永远不会指向 0x3000。如果您汇编成 PE/COFF 或 ELF 可执行程序,则由链接器和 OS 加载器决定堆栈地址和保留大小。在正常情况下,我们不必显式初始化机器堆栈。例如,当 ELF32 程序启动时,ESP=0xffffd600。
标签: assembly x86 nasm callstack