我正在研究 ARM 上的堆栈粉碎,我有一个缓冲区声明为:
字符缓冲区[12];
在我的代码中。
为了在 gdb 中找到 PC 被覆盖的位置,我写了
AAAABBBBCCCCDDDDEEEEFFFF到 buff
我希望 DDDD 将 FP(r11) 覆盖为0x44444444(并且它执行正确)但 PC 被 0x45454544覆盖(而不是 0x45454545)
有谁知道为什么最后一个字节是 D(44) 而不是 E(45)?我尝试过更长的输入,但 PC 中的值总是下降几位。
GDB 输出截图