我只是为了好玩而反汇编和调试一个 ARM 二进制文件,我注意到一些不寻常的事情。考虑以下指令集:-
0x00008058 <+4>: mov r1, pc
0x0000805c <+8>: add r1, r1, #24
0x00008060 <+12>: mov r0, #1
我尝试在 at 设置断点0x0000805c
并检查 register 的值r1
。我期待看到0x0000805c
- 然而,有趣的是,价值是0x8060
.
为什么是这样?这是因为某种指令流水线吗?