是否有任何提供结构化输出的 ARM 反汇编程序?

逆向工程 工具 拆卸 手臂
2021-06-17 05:27:09

是否有任何 ARM(或其他非 x86)反汇编程序可以将指令分解为机器友好结构中的组成部分?理想情况下,它应该是类似XEDdistorm3 的东西,它们分解成一个结构,然后提供一个 API 来查询诸如“这是一个调用吗?” “这是条件分支吗?” 等,或获取指令的操作数。

我找到了armstorm,但它目前只支持 THUMB 。

编辑:澄清一下,我正在寻找可以从另一个程序中调用的东西,并希望具有自由许可(与 GPL 兼容)。

3个回答

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 一样完整。