Differenza tra codice assembly e elenco smontaggio

0

L'elenco di disassemblaggio generato da un disassemblatore è esattamente uguale all'elenco di codice assembly che viene facoltativamente generato da un compilatore durante la compilazione del codice C?

    
posta gautham 19.02.2017 - 03:10
fonte

2 risposte

3

No, mi aspetto che l'output dell'assieme del compilatore possa includere nomi simbolici, funzioni e variabili, anche struct nomi di membri. Lo smontaggio conterrebbe solo numeri.

In altre parole, sia il compilatore che il disassemblatore possono emettere i nomi delle istruzioni del codice operativo, ma il disassemblatore emette semplicemente numeri anziché simboli quando fa riferimento a indirizzi di memoria. O se sta smontando una DLL, il disassemblatore potrebbe emettere i simboli pubblici esportati dalla DLL; ma (a differenza del compilatore) non i nomi simbolici delle variabili interne e delle subroutine.

A parte questo, è lo stesso codice macchina. C'è anche un linker, che avviene dopo il compilatore (l'elaborazione del linker sarà evidente negli indirizzi numerici mostrati dal disassemblatore).

    
risposta data 19.02.2017 - 04:11
fonte
0

Dipende dal compilatore e in genere potrebbe non essere lo stesso (ad esempio perché il compilatore genera molte etichette locali che vanno perse).

Se usi GCC per compilare il tuo codice sorgente foo.c (tecnicamente, un unità di traduzione ) Suggerisco di usare

gcc -Wall -O -fverbose-asm -S foo.c

che produce il codice assembler foo.s che puoi esaminare con un editor. Grazie a -fverbose-asm il file assemblatore contiene anche commenti generati utili (per aiutarti a capire cosa sta succedendo).

    
risposta data 19.02.2017 - 09:12
fonte

Leggi altre domande sui tag