跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • x64 汇编里面 popq %rsp 的结果是什么?先把栈顶的 8byte 元素放到%rsp,然后%rsp 里面的值再+8?
未分類
5 2 月 2021

x64 汇编里面 popq %rsp 的结果是什么?先把栈顶的 8byte 元素放到%rsp,然后%rsp 里面的值再+8?

x64 汇编里面 popq %rsp 的结果是什么?先把栈顶的 8byte 元素放到%rsp,然后%rsp 里面的值再+8?

資深大佬 : movq 8

网上找了很多没看到比较有用的信息

大佬有話說 (17)

  • 資深大佬 : konar

    是抛弃栈顶元素?

  • 資深大佬 : rdZZZ

    用 gcc 编译的么?对%rsp 进行+/-8 的操作,就是出栈入栈的操作。

  • 資深大佬 : konar

    栈顶元素出栈后又放入栈顶,然后栈顶指针下移,那就是抛弃栈顶元素的意思吧
    不过为什么不直接 subq/addq 呢

  • 資深大佬 : nifury

    只放数据到 rsp,不+8
    为什么不 debug 看一眼呢

  • 資深大佬 : konar

    https://stackoverflow.com/questions/14968824/what-is-an-assembly-level-representation-of-pushl-popl-esp

  • 資深大佬 : konar

    关于 push/pop %esp 的,pushq/popq %rsp 应该类似

  • 主 資深大佬 : movq

    @nifury 因为我不会写汇编,只会看。。。

  • 資深大佬 : airqj

    主专攻汇编吗?
    ID 都是为汇编而生啊 🙂

  • 主 資深大佬 : movq

    @airqj 想不出啥名,注册的时候正在看汇编,就整了个这个,看起来比较 geek

  • 資深大佬 : lewis89

    一般不会对 rsp 进行 pop/push 操作 至少我看了这么多 gcc 的反汇编 没有遇到过.. fastcall 的约定是 被调用方保护好 调用方的 rbp 指针就行了,rsp 一般都是用完之后 在当前帧返回之前恢复状态就行了 一般都是当前帧一开始 sub rsp, 0x8 然后当前帧返回前 add rsp, 0x8,这 8 个字节栈空间就是当前函数帧存放变量的位置..

  • 資深大佬 : 6e25h

    csapp 我记得有解释过这个东西,记得好像就是 4 所说的

  • 資深大佬 : Crimilals

    https://www.felixcloutier.com/x86/pop 看伪代码

  • 資深大佬 : Crimilals

    @Crimilals If the ESP register is used as a base register for addressing a destination operand in memory, the POP instruction computes the effective address of the operand after it increments the ESP register. For the case of a 16-bit stack where ESP wraps to 0H as a result of the POP instruction, the resulting location of the memory write is processor-family-specific.

    The POP ESP instruction increments the stack pointer (ESP) before data at the old top of stack is written into the destination.

  • 資深大佬 : irytu

    @nifury @6e25h 是的 是在处理器体系结构讲到的,讲流水线的时候这个是个特例拿出来说的,就是重置栈指针

  • 主 資深大佬 : movq

    @6e25h 我也记得讲过,但是书太厚了不记得在哪里了,就拿出来问一下

  • 資深大佬 : laumm1314

    pop 和 push 命令相反
    push 把数据压入栈顶,然后 sp 减去机器字节长度
    pop 把 sp 加上机器字节,然后数据弹出到目的数
    在 amd64 机器上,sp 对应 rsp
    popq 中的 q 标识数据宽度是 8 个字节,既是 64 位

  • 資深大佬 : laumm1314

    栈是向低方向拓展的,所以 rsp 值变大对应栈收缩,rsp 值变小,栈扩大

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具