【问题标题】:Why does `pop` instruction NOT pop from stack?为什么`pop`指令不会从堆栈中弹出?
【发布时间】:2015-11-18 12:09:45
【问题描述】:

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

  1. SIGSEGV(pop r15)之前的指令

  2. 遇到的指令SIGSEGV

如您所见,rsp 寄存器在pop r15 之后没有改变(它们都是 0x7fff90f83520)! pop r15 本身没有抛出任何异常,但下面的 ret 遇到了 SIGSEGV,因为它不是有效地址。

有人知道为什么会发生这种情况吗?我不知道为什么。
谢谢!
Tgn

【问题讨论】:

    标签: linux debugging gdb stack segmentation-fault


    【解决方案1】:

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

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

    【讨论】:

    • 对不起,我没有表达清楚。我想说的是 rsp 寄存器也没有增加,我会尽快修改我的问题。
    • 是64位的ELF文件,格式为x86-64。而且我只是发现这个进程在即将到ret时似乎已经死了,原因不明。
    • 原来我之前在某处输入了错误的小工具,导致进程终止。该指令没有更改任何内容,因为进程已终止。
    【解决方案2】:

    原来我之前在某处输入了错误的小工具,导致进程终止。该指令没有改变任何内容,因为进程已终止。

    【讨论】:

      猜你喜欢
      • 2010-09-30
      • 2022-01-21
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      相关资源
      最近更新 更多