将手臂指令翻译成十六进制
逆向工程
x86
手臂
修补
二进制编辑
2021-06-11 16:33:11
2个回答
正如我对 Elians 的评论,rasm2 在 Windows 中按原样工作
rasm2 -a arm -b 32 "add r0, r1, r2"将返回 020081e0
您可以使用keystone / capstone进行组装和拆卸
:\>python
>>> from keystone import *
>>> for i in (Ks(KS_ARCH_ARM,KS_MODE_ARM).asm ("add R0,R1,R2" , 0x400000) )[0]:
... print "%02x " % i
...
02
00
81
e0
>>>
或者如果你有 Visual Studio 你可以编译和转储一条指令
:\>cat foo.asm
AREA .text, CODE, ARM
test PROC
add R0,R1,R2
ENDP
END
:\>armasm /nologo foo.asm
:\>dumpbin /disasm foo.obj | grep add
00000000: EB01 0002 add r0,r1,r2
使用梯形校正,您将 KS_MODE_THUMB 与 rasm 一起使用,您应该使用 -b 16 但似乎存在一个错误,即 rasm2 可以正确反汇编十六进制对,但不能再次组装它
所以你可能会在 github 问题中为radare2跟进它
>>> from keystone import *
>>> for i in (Ks(KS_ARCH_ARM , KS_MODE_THUMB).asm("add r0,r1,r2" , 0 ))[0]:
... print "%02x " %i ,
...
01 eb 02 00
>>> ^Z
C:\>rasm2 -a arm -b 16 -d "01 eb 02 00"
add.w r0, r1, r2
C:\>rasm2 -a arm -b 16 add.w r0, r1, r2
Cannot assemble 'add.w' at line 3
invalid
为此,我强烈建议使用命令行工具,例如 rasm2。
它是radare2套件附带的工具。它的基本功能之一是将各种架构中的汇编指令转换为操作码,反之亦然。用法相当简单:
# rasm2 -a arm -b 32 "add R0, R1, R2"
020081e0
这里:
-a 指定架构。
-b 指定位(其中 16 是 Thumb-1)
有关更多信息,请参阅radare2 博客和官方书籍。
其它你可能感兴趣的问题