gdb - 获取返回地址GDB

标签 gdb

我最近开始使用GDB上课,但我一直在挣扎。我在an assignment处必须做实验1练习2,需要我在代码中搜索两个漏洞,并对它们进行以下操作:


第一个必须覆盖堆栈上的返回地址,第二个必须覆盖将用于接管程序控制流的某些其他数据结构。


我已经溢出了数据结构,我认为它正在谈论的是EIP,它指向它将执行的其他指令。

现在如何到达框架的返回地址(RET)?任何帧都没有关系,我只想知道如何计算RET和ESP之间的字节,以便我可以减去它并得到长度。我刚开始使用GDB,所以请放轻松。

最佳答案

现在如何到达框架的返回地址(RET)?


要获取特定功能存储的返回地址的位置,可以在该功能上放置一个断点并使用info frame命令。

这是一个例子:

gdb /path/to/binary
(gdb) br main
(gdb) run
Starting program: /path/to/binary 

Breakpoint 1, 0x08048480 in main ()
(gdb) info frame
Stack level 0, frame at 0xffffd700:
eip = 0x8048480 in main; saved eip = 0xf7e3ca63
Arglist at 0xffffd6f8, args: 
Locals at 0xffffd6f8, Previous frame's sp is 0xffffd700
Saved registers:
ebp at 0xffffd6f8, eip at 0xffffd6fc


注意saved eip = 0xf7e3ca63eip at 0xffffd6fc
在这种情况下,您将要覆盖0xffffd6fc处的值,以便在函数返回时,将以您存储在其中的值继续执行。

关于gdb - 获取返回地址GDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345320/

相关文章:

c++ - sizeof 对 gdb 中数组的引用

c - "segmentation fault"可能是由 C 中的内存分配引起的

c - 没有加载调试符号时,gdb 如何解释 `main`?

安卓 NDK + GDB

c++ - GDB 断点不停止程序(Bullet Physics 库中的断点)

c++ - 从堆栈跟踪中查找共享库中的源代码行

linux - 导入错误 : No module named 'libstdcxx' when starting Eclipse debugger

c++ - 在 gdb 中打印整个链表?

c - 顺序代码执行中的有趣行为

c++ - gdb - 从核心文件中得到完全意外的错误