2011-12-16 15 views
8

Sto cercando una libreria disassembler Java x86 che dovrebbe avere seguenti caratteristiche:Qualsiasi libreria di disassemblatore Java x86 flessibile orientata agli oggetti?

  • smontaggio di codice X86
  • Descrivendo i comandi X86 con le classi Java e oggetti
  • Le classi di comando dovrebbe accettare un visitatore che ha un generico valore di ritorno

Quindi, se ho un po 'di codice che avrebbe smontare in questo modo:

MOV EAX, EBX 
CALL 1234 
JMP 88 

quindi la libreria dovrebbe creare tre oggetti per MOV, CALL e JMP. Quindi realizzo un visitatore che fa cose diverse (es: interpretazione, conversione in x64 o in un'istruzione per un'altra architettura di processore).

Grazie in anticipo.

+0

Non credo che esista un tale disassemblatore, perché l'assemblatore è procedurale. Quindi non puoi convertire da procedurale in Object Oriented senza ridisegnare l'applicazione e questo deve essere fatto a mano. – Zemzela

+0

Il punto non riguarda la conversione procedurale alla progettazione orientata agli oggetti. Voglio solo una libreria che descriva le procedure come oggetti Java e posso fare tutto ciò che voglio con loro. – belgther

+1

Ma perché non si usa un normale disassemblatore x86 per smontare il binario e analizzare l'output con un programma Java. È quindi possibile leggere semplicemente il codice smontato in un elenco di oggetti che rappresentano le istruzioni MOV o CALL; oppure potresti provare a costruire una struttura ad albero cercando di identificare i sottoelementi tramite le istruzioni di salto. –

risposta

1

Non conosco alcuna libreria di questo tipo implementata interamente in Java. Anche se, ho sentito parlare di disassemblatore distorm. È sviluppato in C. Ma i wrapper Java sono disponibili per questa libreria. Date un'occhiata a questo. Potrebbe essere utile per te.

+0

Grazie per averci suggerito su Distorm. Ma vedo che ha due svantaggi: primo, non è realmente orientato agli oggetti e le istruzioni decodificate non accettano un visitatore. in secondo luogo, contiene gli operandi come una stringa, il che significa che devono essere nuovamente analizzati. – belgther

+1

Scrivere un'astrazione di visitatore per qualcosa che ti fornisce un supporto dettagliato dovrebbe essere facile. La parte davvero difficile è "analizzare il codice macchina" e la distorsione sembra essere buona. Inoltre, questo non mi sembra un parsing di stringhe: http://code.google.com/p/distorm/source/browse/trunk/examples/java/distorm/src/diStorm3/Operand.java – tucuxi