ARM PC 在缓冲区溢出时被不正确的值覆盖
ARM PC overwritten with incorrect value in buffer overflow
我正在 ARM 上进行堆栈粉碎,我有一个缓冲区声明为:
字符增益[12];
在我的代码中。
为了在 gdb 中找到 PC 被覆盖的位置,我写了
AAAABBBBCCCCDDDDEEEEEEFFFF 增益
我希望 DDDD 将 FP(r11) 覆盖为 0x44444444(并且它执行正确)但是 PC 被 0x45454544 覆盖( 而不是 0x45454545)
有谁知道为什么最后一个字节是 D(44) 而不是 E(45)?我尝试过更长的输入,但PC中的值总是下降几位。
截图
of GDB output
PC 寄存器不能保存奇数 - LSB 被强制为 0 以确保地址对齐。
我正在 ARM 上进行堆栈粉碎,我有一个缓冲区声明为:
字符增益[12];
在我的代码中。
为了在 gdb 中找到 PC 被覆盖的位置,我写了
AAAABBBBCCCCDDDDEEEEEEFFFF 增益
我希望 DDDD 将 FP(r11) 覆盖为 0x44444444(并且它执行正确)但是 PC 被 0x45454544 覆盖( 而不是 0x45454545)
有谁知道为什么最后一个字节是 D(44) 而不是 E(45)?我尝试过更长的输入,但PC中的值总是下降几位。
截图 of GDB output
PC 寄存器不能保存奇数 - LSB 被强制为 0 以确保地址对齐。