high->low
,但根据此图片,它是low->high
。
我现在很困惑,情况就是这样?
似乎代码也是从low->hight
执行的:
0x0000000000400498 <main+0>: push %rbp
0x0000000000400499 <main+1>: mov %rsp,%rbp
0x000000000040049c <main+4>: sub $0x10,%rsp
0x00000000004004a0 <main+8>: movl $0x6,-0x4(%rbp)
答案 0 :(得分:2)
在运行Windows的最流行的体系结构Intel x86 / x64上,堆栈“增长”到较低的地址。即,推入堆栈涉及从堆栈指针(ESP)中减去,并从堆栈弹出涉及添加到堆栈指针。
在您的示例中,堆栈从顶部到底部增长。这是函数的序言,它使用SUB指令为局部变量分配堆栈空间。您可能会将堆栈与存储程序的内存混淆 - 在该区域中,CPU按顺序执行指令,从低地址到高地址,直到遇到分支(例如JMP)指令