【问题标题】:GDB: Find stack memory address where return address of a function is stored?GDB:查找存储函数返回地址的堆栈内存地址?
【发布时间】:2017-02-24 23:17:47
【问题描述】:

我正在处理我的 Raspberry Pi(禁用 ASLR)上的缓冲区溢出问题。 我有一个程序,它有一个main function、一个vulnerable function 和一个不应调用的函数evil function

我的 main 函数有时会调用易受攻击的函数,但 evil 函数显然永远不会被调用。我需要确保它确实如此,使用缓冲区溢出。

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

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

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

【问题讨论】:

    标签: c gdb buffer-overflow exploit


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多