2008-11-26 13 views
14

¿Cómo uso GDB para depurar un programa que no tiene símbolos de depuración en un procesador x86 de 32 bits? Inspeccionar los argumentos de la función, variables locales, resolver punteros sería útil para saber cómo hacerlo. La intención no es utilizar esto para ingeniería inversa, ya que a veces soy demasiado perezoso para instalar los símbolos de depuración y sería genial saber cómo obtener información básica de gdb.¿Usar GDB sin símbolos de depuración en x86?

Respuesta

6

Sin símbolos de depuración, solo puede depurar en el nivel de ASM. Ok, obtienes un bit más información, pero no llegarás muy lejos a menos que entiendas un poco de ASM y el código que genera el compilador. Esto le permitirá hacer una simple inspección de las variables locales, etc. si sabe lo que está haciendo.

Si tiene la fuente, será mucho más fácil simplemente recompilarla.

+0

+1, el BGF en un binario compilado sin símbolos (o incluso un binario suficientemente optimizado) funciona mejor como un nivel de ensamblado depurador: una tarea en la que es razonablemente competente. – Falaina

1

Todo lo que puedes hacer es mirar los registros y el contenido de la pila; tendrás que hacer todo al inferir para qué se usan las cosas, como menciona Draemon.

20

Para empezar, puede hacer;

gdb "whatever" 
break __libc_start_main 
r 

que configurar un punto de interrupción en el código crt0 de libc y permitirá romper antes de principal, incluso si el binario de destino está totalmente despojado.

Eso lo pondrá en estado de funcionamiento en un punto de interrupción antes que la mayoría del código de usuario. A continuación, puede realizar un solo paso, desensamblar, volcar la memoria, etc ... para el contenido de su corazón.

Esto funciona en todas las plataformas, el hecho de que su pregunta sobre IA-32/x86 no importe.

+0

muy agradable. Sería genial mencionar que "disassemble" es un comando gdb que vuelca ASM. ¡Ahora puede leer (o, en mi caso, mirar) el código ASM! ¡Hurra! – Lotus

+1

[Aquí hay un buen tutorial] (http://felix.abecassis.me/2012/08/gdb-debugging-stripped-binaries/) sobre la depuración de binarios eliminados con GDB. –

0

Bueno, lo más importante es que puedes desenrollar la pila. Hay tres maneras en que esto se puede asegurar:

  • símbolos Construir depuración con -g

  • en sistemas que C++ desenrollar excepción a través de tablas (? Probablemente nada ELF estos días), la bandera -funwind-tables le dirá que para generar dichas tablas independientemente del idioma, y ​​GDB puede usar estas tablas (al menos, con x86 linux puede).

  • O, en su defecto, al menos asegúrese de que no está habilitado

Cuestiones relacionadas