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

标签 c gdb buffer-overflow exploit

我正致力于在我的 Raspberry Pi(禁用 ASLR)上产生缓冲区溢出。 我有一个程序,它有一个 main function , 一个 vulnerable function和一个不应该被调用的函数,evil function .

我的主函数在某个时候调用了易受攻击的函数,但恶意函数显然从未被调用过。我需要使用缓冲区溢出来确保它确实如此。

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

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

我的问题是我是否可以使用 gdb 在堆栈中“搜索”我的返回地址。

最佳答案

Raspberry Pi 运行的是 ARM 微 Controller ,因此您应该阅读有关 ARM 架构和调用约定的更多信息。

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

要用 gdb 直观地检查这些寄存器的值,您可以使用指令 info registers,(如果您键入 i r 也可以工作)。查看doc了解更多详情。

关于c - GDB:查找存储函数返回地址的堆栈内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061541/

相关文章:

c++ - 为 C++ 项目报告的奇怪的 Klocwork 问题

c - 整数溢出后将大字符串复制到小缓冲区时没有 SEG_FAULT

c - 如果线程在其他线程等待(加入)之前退出怎么办?

c - 如何在 C 中将完整路径(字符串)中的文本附加到文件名?

c++ - libtool 减慢了 gdb

GDB:更改堆栈内存中的字符串

c - 读取结构大小时出现问题

objective-c - 如何从 C 中的控制台接受 "only characters"或 "only digits"?

c++ - 如何删除 GDB 中的捕获点

c - c中的这个缓冲区溢出解决方案有什么问题?