Ldr arm thumb2 必须是 4 的倍数吗?

逆向工程 二元分析 手臂 二进制编辑
2021-06-20 16:05:29

我在这里看到http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/CIHDGFEG.html手臂上的 thumb2 ldr 必须是 4 的倍数。

我在手臂拇指 2 上运行并想运行此指令ldr r0, [pc, #0x13]

我 truslate inDFF81300并且有效,即使 0x13 也不是 4 的倍数。

这是为什么?

1个回答

您的汇编程序为 ldr 生成的指令实际上是 ldr.w,一条 32 位 Thumb 2 指令,正如您在使用四个字节的编码中看到的那样。根据我的经验,ARM 汇编程序试图变得聪明并找出最佳(或唯一)工作指令编码 - 特别是在使用统一语法时。

四字节对齐只是对编码为 16 位指令的 ldr 指令的限制(您链接的文档中的脚注 [b])。我想这个限制是由于 16 位操作码中常量偏移的编码空间受限造成的,所以拇指指令集设计者在这里选择了更大的可能偏移。