获取返回地址GDB

时间:2015-09-02 05:35:17

标签: gdb

我最近开始在课堂上使用GDB而且我一直在苦苦挣扎。我有an assignment,我必须在那里进行实验1练习2,这需要我在代码中搜索两个漏洞并使用它们执行以下操作:

  

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

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

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

1 个答案:

答案 0 :(得分:17)

  

现在我如何到达帧的返回地址(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处的值,以便在函数返回执行时将继续存储在那里的值。