【问题标题】:How the stack pointer works on x86 systems堆栈指针在 x86 系统上的工作原理
【发布时间】: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


【解决方案1】:

是的,x86 使用相对和连续寻址。 The Wikipedia article on x86 Addressing 更详细地介绍了位移方程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2023-03-23
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多