为什么`pop`指令不会从堆栈中弹出?

时间:2015-11-18 12:09:45

标签: linux debugging gdb stack sigsegv

我正在进行CTF式练习,我在pop-ret小工具中发现了一些不寻常的东西 这是一个64位的ELF文件,环境是Ubuntu 12.04.5(64位) 我的意思是如下:

  1. SIGSEGV之前的指令(pop r15enter image description here

  2. 遇到SIGSEGV的说明 enter image description here

  3. 正如你可以看到的那样,pop r15之后rsp寄存器没有改变(它们都是0x7fff90f83520)! pop r15本身没有抛出任何异常,但以下ret遇到SIGSEGV,因为它不是有效地址。

    任何人都知道为什么会这样?我无法弄明白为什么。
    谢谢!
    TGN

2 个答案:

答案 0 :(得分:0)

弹出指令更改内存的实际内容。它只是将堆栈指针(表示堆栈顶部)指向的值复制到目标寄存器(在您的情况下为r15),然后递增堆栈指针,这表示从中移除值当前的堆栈。

顺便说一下,你没有指定指令集,所以我假设它是平常的。

答案 1 :(得分:0)

事实证明我之前在某处输入了错误的小工具,从而导致了这个过程。该指令没有改变任何东西,因为该过程已经终止。