¿Cómo se puede ver el contenido de la pila con GDB?

95

Soy nuevo en GDB, así que tengo algunas preguntas:

  • ¿Cómo puedo ver el contenido de la pila? Ejemplo: para ver el contenido del registro, escribo info registers. Para la pila, ¿cuál debería ser?

  • ¿Cómo puedo ver el contenido de $0x4(%esp)? Cuando print /d $0x4(%esp)escribo, GDB da un error.

Plataforma: Linux y GDB

Peter Mortensen
fuente
posible duplicado de Uso de GDB para inspeccionar la pila de máquinas
Empleado ruso

Respuestas:

114

info frame para mostrar la información del marco de la pila

Para leer la memoria en direcciones dadas, debe echar un vistazo a x

x/x $esppara hexadecimal x/d $esppara firmado x/u $esppara sin firmar, etc. x usa la sintaxis de formato, también puede echar un vistazo a la instrucción actual a través de x/i $eipetc.

Dip switch
fuente
69

Utilizar:

  • bt - backtrace: muestra funciones de pila y argumentos
  • info frame - mostrar punteros de inicio / fin / args / locales de la pila
  • x/100x $sp - mostrar memoria de pila
(gdb) bt
#0  zzz () at zzz.c:96
#1  0xf7d39cba in yyy (arg=arg@entry=0x0) at yyy.c:542
#2  0xf7d3a4f6 in yyyinit () at yyy.c:590
#3  0x0804ac0c in gnninit () at gnn.c:374
#4  main (argc=1, argv=0xffffd5e4) at gnn.c:389

(gdb) info frame
Stack level 0, frame at 0xffeac770:
 eip = 0x8049047 in main (goo.c:291); saved eip 0xf7f1fea1
 source language c.
 Arglist at 0xffeac768, args: argc=1, argv=0xffffd5e4
 Locals at 0xffeac768, Previous frame's sp is 0xffeac770
 Saved registers:
  ebx at 0xffeac75c, ebp at 0xffeac768, esi at 0xffeac760, edi at 0xffeac764, eip at 0xffeac76c

(gdb) x/10x $sp
0xffeac63c: 0xf7d39cba  0xf7d3c0d8  0xf7d3c21b  0x00000001
0xffeac64c: 0xf78d133f  0xffeac6f4  0xf7a14450  0xffeac678
0xffeac65c: 0x00000000  0xf7d3790e
gaoithe
fuente
56

Necesita usar los comandos de visualización de memoria de gdb. El básico es x, para examinar . Hay un ejemplo en la página vinculada que usa

gdb> x/4xw $sp

para imprimir "cuatro palabras ( w) de memoria sobre el puntero de la pila (aquí, $sp) en hexadecimal ( x)". La cita está ligeramente parafraseada.

relajarse
fuente