ARM调试有趣的行为

逆向工程 调试 手臂
2021-06-25 10:11:16

我只是为了好玩而反汇编和调试一个 ARM 二进制文件,我注意到一些不寻常的事情。考虑以下指令集:-

   0x00008058 <+4>: mov r1, pc
   0x0000805c <+8>: add r1, r1, #24
   0x00008060 <+12>:    mov r0, #1

我尝试在 at 设置断点0x0000805c并检查 register 的值r1我期待看到0x0000805c- 然而,有趣的是,价值是0x8060.

为什么是这样?这是因为某种指令流水线吗?

1个回答

是的,这是因为流水线。

来自http://winarm.scienceprog.com/arm-mcu-types/how-does-arm7-pipelining-works.html --

ARM流水线

PC(程序计数器)在当前指令之前计算8 个字节