Há algum desmontador ARM que forneça saída estruturada?

Há algum desmontador ARM (ou outro não-x86) que decompõe uma instrução em suas partes componentes em uma estrutura amigável à máquina? Idealmente, seria algo como XED ou distorm3 , que se desmontam em uma estrutura e fornecem uma API para consultar coisas como “Isso é uma chamada?” “Este é um ramo condicional?” etc., ou obter os operandos de uma instrução.

Eu encontrei armstorm , mas atualmente só suporta THUMB.

Editar: para esclarecer, estou procurando por algo que possa ser chamado de dentro de outro programa e espero que tenha uma licença liberal (compatível com GPL).

Comentários

  • Pelo que vale a pena, acho que é algo que provavelmente será adicionado ao ERESI em breve, eles já o têm para Intel e Sparc e estão adicionando mais suporte a ARM.

Resposta

DARM (GitHub) de Jurriaan Bremer é um desmontador ARMv7 escrito em C e está disponível sob uma Licença BSD de 3 cláusulas.

Nota: Atualmente não suporta o modo Thumb.

Um exemplo simples de uso de DARM poderia ser o seguinte:

// 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 ); } 

Comentários

  • Isso parece o que eu estava procurando! Acho que poderia até usar os dois DARM e tempestade de braços para obter suporte total …

Resposta

Sim, IDA Pro “s SDK permite que você acesse as” partes do componente de instruções por meio da classe insn_t (em ua.hpp).

Comentários

  • Isso ' é excelente para saber, mas eu ' estou procurando algo que possa ser chamado de dentro de outro programa e espero que tenha um licenciamento liberal.
  • @ BrendanDolan-Gavitt: talvez afirmar que na pergunta seja uma boa ideia então?

Resposta

Uma resposta mais atualizada a esta pergunta seria sugerir Biblioteca Capstone . Eu o usei para a desmontagem do ARM e é bastante confiável. IMHO, é a melhor biblioteca de código aberto disponível.

A biblioteca é baseada nas descrições das instruções TabelGen do LLVM. Portanto, seu suporte a ISA é tão completo quanto LLVM.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *