2012-04-02 13 views

Respuesta

40

Puede ejecutar gdb en la interfaz de usuario texto modo (UIS):

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

El comando layout split divide la ventana en dos partes - una de ellas mostrando el código fuente, el otro la montaje correspondiente. unos a otros algunos trucos:

  • conjunto desmontaje sabor Intel - si lo prefieres notación Intel
  • ASM-demangle de impresión conjunto - demangling C nombres ++ en vista de montaje
  • ni - próximos instrucción
  • si - paso instrucción

Si no desea usar el modo TUI (p. su terminal no le gusta), siempre se puede hacer:

x /12i $pc 

lo que significa de impresión 12 Instrucciones de dirección de contador de programa actual - esto también funciona con los trucos anteriores (desenredo, paso a paso las instrucciones, etc.).

El truco "x/12i $ pc" funciona tanto en gdb como en cgdb, mientras que "distribución de disposición" solo funciona en gdb.

Enjoy :)

+0

¿Hay alguna manera de conseguir también deshacerse de ventana de división superior? Es innecesario y requiere espacio. –

+2

@BabkenVardanyan Pruebe 'layout next'. Si no le da el diseño deseado intente este comando unas cuantas veces más. Este comando sigue cambiando de diseño para que pueda conservar el que desea. –

17

Trate disassemble /m.

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

El formato es similar a la de objdump -S, y se entremezcla con la fuente de desmontaje. extracto resultado de ejemplo:

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

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

No quería las otras soluciones porque no quiero reiniciar gdb y configurarlo de la misma manera otra vez y las referencias del archivo .o a las secciones reubicadas lo hacen difícil de entender. Así que pensé que esto era solo el boleto.Imagínese mi horror, entonces, cuando finalmente se dio cuenta de que desmonte/m omite en silencio algunas instrucciones, al igual que después de la primera, la instrucción de tres bytes: '0x000000000442f038 <+24>: \t mov% RSI,% RBX 0x000000000442f043 <+35>: \t sub $ 0x38, % rsp' Eso es 'GNU gdb (GDB) 7.4.1-debian'. –

3

Para su propósito, intente

objdump -S <your_object_file> 

del hombre objdump:

-S 
--source 
Display source code intermixed with disassembly, if possible. 
Implies -d. 
Cuestiones relacionadas