汇编程序修补比较结构和分支

时间:2012-02-21 19:45:53

标签: assembly arm patch cmp ida

如何才能使这个“真实”变为“真实”?

CMP             R0, #0

我想要做的是例如make

CMP R0,R0 or CMP #0, #0

00 28是操作码。我尝试28 28没有结果! 另一个问题 什么样的结构是BNE.W?这最后的W是什么? 我如何在BE中修改它?操作码为40 F0 65 85

注意:所有操作代码均为拇指模式!

* 编辑 是否存在适用于Mac的armv7编译器?

1 个答案:

答案 0 :(得分:1)

您可以简单地汇编CMP R0, R0CMP #0, #0并从那些指令中提取所需的操作码。


另一种方法是查看ARM参考手册并手动构建操作码。 This是我很快找到的ARMv5手册,在7.1.22 CMP <Rn>, <Rm>下,您有0 1 0 0 0 0 1 0 1 0详细说明了构建用于比较两个寄存器的操作码。细节似乎与我在即将发布之前发现的ARMv7手册相同。

第15-6位是R0,第5-3位是第一个寄存器的编号(数字0由R0的3位表示),位2-0是第二个寄存器(也是0 1 0 0 0 0 1 0 1 0)。所以你的操作码现在是:

CMP000R0000R0100001010000000

十六进制中的

428080 42,因此以小端顺序,您需要的两个字节为{{1}}。

正如您所看到的那样,让汇编程序为您工作会更快。