【发布时间】:2021-04-06 08:15:45
【问题描述】:
我正在 x64 上进行汇编编程,我打算在堆栈中推送一个地址。我打算写push %rsp,但是,由于这条指令改变了%rsp的值,我不确定会推送什么值。
特别是如果我运行以下命令:
movq $0x10, %rsp
pushq %rsp
内存地址0x8会包含0x10还是0x8?此处理器是否依赖于所有 x64 处理器?
【问题讨论】:
-
此代码序列对您有何用处?如果您分享,也许我们可以评论您正在解决的更大问题。
-
@ErikEidt:如果 RSP 当前指向 ASCII 字节或您刚刚推送的其他内容,则
push %rsp作为 shellcode 的一部分可能很有用。甚至作为在函数顶部实现volatile int x = 10, *px = &x;的一部分。但不是mov $0x10, %rsp首先!所以这部分例子完全是人为的。
标签: assembly x86-64 callstack instructions