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

我发现了armstorm,但目前仅支持THUMB。可以从另一个程序中调用,并且希望它具有自由许可(与GPL兼容)。

评论

对于它的价值,我认为它可能会在短期内添加到ERESI中,因为他们已经为Intel和Sparc提供了它,并且正在增加更多的ARM支持。

#1 楼

Jurriaan Bremer的DARM(GitHub)是用C编写的ARMv7反汇编程序,可在3条款BSD许可下使用。 >使用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 );
}


评论


这看起来像我要的!我想我什至可以同时使用DARM和Armstorm来获得全力支持...

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
13年4月16日在17:05

#2 楼

是的,IDA Pro的SDK允许您通过insn_t类(在ua.hpp中)访问指令的组成部分。

评论


很高兴知道这一点,但是我正在寻找可以在另一个程序中调用的东西,希望它具有自由许可。

–布伦丹·多兰·加维特(Brendan Dolan-Gavitt)
13年4月16日在1:53

@ BrendanDolan-Gavitt:也许说明问题是一个好主意?

– 0xC0000022L♦
2013年4月17日下午4:51

#3 楼

这个问题的最新答案是建议Capstone库。我已经将它用于ARM拆卸,并且非常可靠。恕我直言,这是目前最好的开源库。

该库基于LLVM的TabelGen指令说明。因此,它的ISA支持与LLVM一样完整。