【发布时间】:2018-04-17 03:42:21
【问题描述】:
当输入一个 C 函数时,我希望在反汇编中看到堆栈指针是如何被减去足以为变量腾出空间的,但没有;我只看到变量的地址是如何通过ebp直接访问的,当esp仍然指向ebp时。
push %rbp
mov %rsp,%rbp
movl $0x4,-0x4(%rbp)
mov $0x0,%eax
pop %rbp
retq
我必须创建很多变量并初始化它们以让计算机认真对待,看看是如何产生大量不需要的空间的。差异真的是使用的空间量还是其他?如果是这样, 只有当我要求大量空间时才需要通过移动 rsp 腾出空间?
【问题讨论】:
-
没有局部变量?
-
这有点不寻常,不要强迫我们猜测你正在使用的编译器。但是,当程序在保护模式操作系统上运行时,叶函数(不进行其他函数调用)在技术上是不必要的。
-
@m0skit0:看看它存储在
rsp下面。这显然是 gcc 或 clang-O0与本地人。
标签: assembly stack x86-64 red-zone