我最近开始使用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 = 0xf7e3ca63
和eip at 0xffffd6fc
。在这种情况下,您将要覆盖
0xffffd6fc
处的值,以便在函数返回时,将以您存储在其中的值继续执行。
关于gdb - 获取返回地址GDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345320/