2012-04-02 9 views
32

Abbiamo un modo per visualizzare il codice assembly e c utilizzando gdb.Visualizza sia il codice assembly che C

disassembla nome_funzione mostra solo l'assembly, stavo cercando di trovare un modo per facilitare il codice c del codice all'assemblaggio. Grazie

risposta

40

È possibile eseguire gdb in Text User Interface modalità (TUI):

gdb -tui <your-binary> 
(gdb) b main 
(gdb) r 
(gdb) layout split 

Il comando layout split divide la finestra in due parti - uno di loro la visualizzazione del codice sorgente, l'altra la montaggio corrispondente. pochi altri trucchi:

  • set smontaggio-sapore intel - se il vostro preferito di Intel notazione
  • set di stampa ASM-demangle - nomi demangles C++ in vista di assieme
  • ni - prossimi istruzione
  • si - passo istruzione

Se non si desidera utilizzare la modalità TUI (ad es. il terminale non piace), si può sempre fare:

x /12i $pc 

che significa Stampa 12 istruzioni dal programma attuale indirizzo contatore - questo funziona anche con i trucchi di cui sopra (di decodifica, passo-passo le istruzioni, etc.).

Il trucco "x/12i $ pc" funziona sia in gdb che in cgdb, mentre "layout split" funziona solo in gdb.

Enjoy :)

+0

Esiste un modo per anche sbarazzarsi di finestra divisa in alto? È inutile e prende spazio. –

+2

@BabkenVardanyan Prova 'layout successivo'. Se non ti dà il layout desiderato, prova questo comando ancora qualche volta. Questo comando continua a passare da un layout all'altro in modo da poter mantenere quello desiderato. –

17

Prova disassemble /m.

Fare riferimento http://sourceware.org/gdb/current/onlinedocs/gdb/Machine-Code.html#Machine-Code

Il formato è simile a quello di objdump -S, e mischiano con fonte smontaggio. Esempio estratto uscita:

10  int i = 0; 
=> 0x0000000000400536 <+9>: movl $0x0,-0x14(%rbp) 

11  while (1) { 
12   i++; 
    0x000000000040053d <+16>: addl $0x1,-0x14(%rbp) 
+0

Non volevo le altre soluzioni perché non voglio riavviare gdb e farlo configurare di nuovo allo stesso modo ei riferimenti del file .o alle sezioni trasferite rendono difficile capire. Quindi pensavo che questo fosse solo il biglietto.Immaginate il mio orrore, poi, quando alla fine ho capito che smontare/m in silenzio omette alcune istruzioni, come dopo la prima, l'istruzione di tre byte: '0x000000000442f038 <+24>: \t mov% rsi,% rbx 0x000000000442f043 <+35>: \t sub $ 0x38, % rsp' Questo è 'GNU gdb (GDB) 7.4.1-debian'. –

3

per il vostro scopo, provare

objdump -S <your_object_file> 

da uomo objdump:

-S 
--source 
Display source code intermixed with disassembly, if possible. 
Implies -d. 
Problemi correlati