将手臂指令翻译成十六进制

逆向工程 x86 手臂 修补 二进制编辑
2021-06-11 16:33:11

我正在寻找简单的工具(不是网站)将 arm 指令转换为十六进制,如http://armconverter.com/

没有链接器,我想要放置 1 条指令,并想要获取十六进制。

请问你知道吗?

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 博客官方书籍