【发布时间】:2018-06-23 10:12:16
【问题描述】:
我最近开始寻求更深入地了解我的计算机的工作原理。我的问题是关于 push 和 pushq 之间的区别。
我知道 push 会将一个值写入堆栈,我的假设是 pushq 做了类似的事情。 q 的存在让我认为应该有细微的差别,但我似乎无法理解其中的差别。
我说过在使用 gdb 和命令 'layout asm' 调试文件 /lib/udev/iphone-set-info 时要考虑这个问题。
有问题的代码是:
pushq $0x0
push %r9
我知道 $0x0 是 NULL 的十六进制,而 %r9 是通用寄存器之一。这是否只是意味着我们将 Null 写入堆栈,并在其上方写入寄存器 %r9?
【问题讨论】:
-
没有区别,
q后缀是可选的,因为它是 64 位代码中的默认操作数大小。由于堆栈向下增长,零字节实际上在内存中高于%r9。
标签: linux assembly gdb reverse-engineering att