gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:31 27 4
gpt4 key购买 nike

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

  1. SIGSEGV(pop r15)之前的指令 enter image description here

  2. 遇到SIGSEGV的指令 enter image description here

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

有人知道为什么会这样吗?我不知道为什么。
谢谢!

最佳答案

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

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

关于linux - 为什么 `pop` 指令不从堆栈中弹出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33779706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com