GDB:查找存储函数返回地址的堆栈内存地址?

时间:2016-10-15 16:31:58

标签: c gdb buffer-overflow exploit

我正在努力在我的Raspberry Pi上生成缓冲区溢出(禁用ASLR)。 我有一个程序,其中包含main functionvulnerable function和不应调用的函数evil function

我的main函数在某个时刻调用易受攻击的函数,但是邪恶的函数显然永远不会被调用。我需要确保它使用缓冲区溢出。

所以到目前为止我得到的是main函数中易受攻击函数的返回地址,我想用邪恶函数的起始地址覆盖它。我认为这是正确的做法。

但是我无法弄清楚如何以这种方式检查gdb中的内存,以便找到存储返回地址的堆栈地址。有一个可用的例子,它在程序运行时通过gdb输入一串字符,然后它们查找堆栈指针周围的内存,并以某种方式存储返回地址。这对我来说似乎很奇怪,因为他们怎么能知道他们的输入只存储了几个地址,远离那些非常想要的返回地址。

我的问题是,如果我可以搜索'使用gdb返回地址的堆栈。

1 个答案:

答案 0 :(得分:-1)

Raspberry Pi正在运行ARM微控制器,因此您应该阅读有关ARM体系结构和调用约定的更多信息。

您应该阅读有关ARM寄存器的更多信息,尤其是堆栈指针(缩写为SP)以及链接寄存器(缩写为LR:这是存储函数的返回地址的位置)。例如,请参阅此question以获得更好的解释。

要使用gdb直观地检查这些寄存器的值,您可以使用指令java.util.List,(如果您键入info registers也可以使用)。有关详细信息,请参阅doc