是否有任何 ARM(或其他非 x86)反汇编程序可以将指令分解为机器友好结构中的组成部分?理想情况下,它应该是类似XED或distorm3 的东西,它们分解成一个结构,然后提供一个 API 来查询诸如“这是一个调用吗?” “这是条件分支吗?” 等,或获取指令的操作数。
我找到了armstorm,但它目前只支持 THUMB 。
编辑:澄清一下,我正在寻找可以从另一个程序中调用的东西,并希望具有自由许可(与 GPL 兼容)。
是否有任何 ARM(或其他非 x86)反汇编程序可以将指令分解为机器友好结构中的组成部分?理想情况下,它应该是类似XED或distorm3 的东西,它们分解成一个结构,然后提供一个 API 来查询诸如“这是一个调用吗?” “这是条件分支吗?” 等,或获取指令的操作数。
我找到了armstorm,但它目前只支持 THUMB 。
编辑:澄清一下,我正在寻找可以从另一个程序中调用的东西,并希望具有自由许可(与 GPL 兼容)。
DARM(GitHub的)由Jurriaan布雷默是用C语言编写的ARMv7的拆装器和一个3-clause BSD许可证下是可用的。
注意:目前不支持 Thumb 模式。
使用 DARM 的一个简单示例如下:
// The structure which will hold all the metadata about the disassembled instruction...
darm_t d;
// disassemble a 32bit opcode...
if( darm_armv7_disasm( &d, 0xE12FFF14 ) >= 0 )
{
if( d.instr == I_BX )
{
// do something with a BX instructiuon...
}
// print the disassembled full instruction
darm_str_t str;
if( darm_str( &d, &str) > 0 )
printf( "%s\n", str.instr );
}
是的,IDA Pro 的 SDK允许您通过insn_t 类(在 ua.hpp 中)访问指令的组成部分。
这个问题的最新答案是建议Capstone库。我已经将它用于 ARM 反汇编,它非常可靠。恕我直言,这是最好的开源库。
该库基于 LLVM 的 TabelGen 指令描述。因此,它的 ISA 支持与 LLVM 一样完整。