【发布时间】:2020-06-10 10:24:11
【问题描述】:
我想在 Keil 中确定一个函数的返回地址。我在 Keil uvision 的调试模式下打开了反汇编部分。显示的是一些像这样的汇编代码:
我的目的是通过在微控制器上使用缓冲区溢出向微控制器注入一个简单的二进制代码。see: Buffer overflow 我想确定“测试”函数的返回地址。是一定要知道怎么看汇编代码还是有什么技巧可以找到返回地址?
我是组装新手。
【问题讨论】:
-
在 ARM 上,返回 value 将在
r0中,函数将返回的地址将保存在lr中(查找bx lr或pop {pc}指令)。 -
您绝对需要了解您使用的处理器的最少组装。 BTW 为什么你需要知道退货地址?你打算用它做什么?
-
嗯,我正在研究硬件安全。我正在尝试通过受益于微控制器的缓冲区溢出来进行代码注入。
-
恐怕在ARM上这样一个简单的函数你无法覆盖被调用函数的返回地址,因为它大多在寄存器LR(R14)中。
-
@thebusybee:请注意,该函数确实推送
lr并将其弹出回pc(直接因为它不需要bx进行拇指交互操作),因此您可以在堆栈内存中覆盖它.
标签: c assembly arm memory-address keil