Quando si guarda il binario
48 c7 c0 01 00 00 00
è necessario smontarlo per capire il suo significato.
L'algoritmo per lo smontaggio non è difficile, ma è complesso. Suppone di cercare più tabelle.
L'algoritmo è descritto nel 2 ° volume di Intel Developer Manuale,
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2 (2A, 2B & 2C):
Instruction Set Reference, A-Z
di iniziare a leggere dal capitolo intitolato INSTRUCTION FORMAT
.
Oppure, ci sono buoni libri che dedicano interi capitoli su questo argomento, come ad esempio
X86 Instruction Set Architecture, Mindshare, by Tom Shanley.
Un intero capitolo è dedicato a smontare X86 binario.
Oppure si può iniziare a leggere l'algoritmo generale da un manuale per la stessa lingua fatta da AMD:
AMD64 Architecture
Programmer’s Manual
Volume 3:
General-Purpose and System Instructions
Qui, nel capitolo Instruction Encoding
troverete l'automa che definisce questo linguaggio di istruzioni, e da questo schema grafico è possibile scrivere facilmente il decoder.
Dopo aver eseguito questa operazione, è possibile tornare al Manuale Intel, 2 ° volume, e utilizzarlo come libro di riferimento.
Ho trovato utile anche lo reverse engineering class da http://opensecuritytraining.info/. Questo sito è stato creato da uno studente di dottorato della CMU, la maggior parte non è ben fatto, ma richiede più tempo per studiarlo e applicarlo.
Dopo aver compreso le idee di base, è possibile esaminare un progetto gratuito che implementa l'algoritmo. Ho trovato utile il progetto distorm.All'inizio è importante non guardare a progetti astratti (come qemu o objdump), che cercano di implementare dissasembler per molte lingue nello stesso codice in cui ti perderai. Distorm
si concentra solo su x86 e lo implementa correttamente ed esaurientemente. Trasmette in linguaggio formale la definizione del linguaggio X86, mentre i manuali Intel e AMD definiscono il linguaggio X86 usando il linguaggio naturale.
Altro progetto che funziona bene è udis86.
Ho visto domande simili qui. Se potessi trovare questo su Google, non avrei chiesto. Il fatto di essere a conoscenza del riferimento che ho inserito nella mia domanda dimostra anche che non sono troppo pigro per cercare me stesso. – Christoph
@Oded, googling per "x86 0x50 prefisso istruzioni" è piuttosto complicato se non sai cosa stai cercando ... – Griwes
@Oded Ho riformulato la mia domanda per essere più specifico per lo sviluppatore. Visto il riferimento (veramente buono!) A x86asm.net, credo di aver solo bisogno di capire come si rompe quel codice operativo. Griwes mi ha aiutato. – Christoph