[ARM]这个校验和代码如何工作以及如何在C中恢复它?

逆向工程 部件 调试器 手臂
2021-07-12 07:40:31

我正在尝试反转获取字符串并计算其校验和的简单代码。我一直试图理解每条指令,但它们看起来与 arm 文档中所说的不同。这是完整的代码(使用 no$gba 调试器) 粉红色表示校验和代码

我已经看到代码,知道一旦计算出校验和,它就会存储在 r0 寄存器中。文档指定 EOR 接收 2 个参数,而这里采用 4. eor r3,r3,r0,asr 8h我发现这将类似于 r3 = (r3^r0)>>8 但我不是真的当然。此外,C/C++ 没有指定 >> 运算符是否执行算术或逻辑移位 (asr)

mov 的指令也会造成同样的混淆。子研究所。将在诸如r2-- 之类的东西中反转;或 r2=r2-1;

谢谢你的时间。

编辑:校验和是 2 个字节长,我举了一些例子:

字符串:AAAAAAB -- 校验和:0xB649(调试时,小端写入)

字符串:AAAAAAA -- 校验和:0x68BC(注意:无法通过对不同校验和样本执行操作来计算校验和)

1个回答

可以使用Ghidra这样的反汇编器和反编译器来获得 C 等效代码。

此外,按照@RadLexus 的规定,可以在此处找到 ARM 文档:http ://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/BABGIEBE.html