¿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
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.
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.
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.
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
[Aquí hay un buen tutorial] (http://felix.abecassis.me/2012/08/gdb-debugging-stripped-binaries/) sobre la depuración de binarios eliminados con GDB. –
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
- 1. no se encontraron símbolos de depuración al usar gdb
- 2. Depuración usando gdb - Mejores prácticas
- 3. símbolos de depuración en Erlang
- 4. ¿Cómo se ven los símbolos de depuración?
- 5. Depuración SIGBUS en x86 Linux
- 6. No hay símbolos de depuración en gdb incluso cuando se compila con la bandera -g
- 7. Agregar símbolos propios para el archivo en gdb
- 8. gdb - depuración con tubería
- 9. Técnicas de depuración sin herramientas de depuración
- 10. plantillas de depuración con GDB
- 11. Símbolos de depuración no cargando
- 12. Cómo usar la versión de depuración de libc
- 13. Xcode, no hay símbolos de depuración para cierta subclase
- 14. Símbolos de depuración en modo de lanzamiento
- 15. Análisis coredump post-mortem remoto sin tener símbolos de depuración exactos para bibliotecas de sistema compartido
- 16. Depuración de bibliotecas desmontadas con gdb
- 17. ¿Cómo usar gdb como monitor?
- 18. Visual studio + depuración remota de gdb
- 19. Usando perlbrew para construir un perl con símbolos de depuración
- 20. ¿Alguien probó la depuración inversa en gdb?
- 21. Xcode 3.2 + LLVM = sin símbolos locales al depurar
- 22. Envío de mensajes a objetos mientras se depura Objective-C en gdb, sin símbolos
- 23. Cómo leer fotogramas de un volcado de memoria (sin GDB)?
- 24. Compilación de GDB para la depuración remota
- 25. Depuración de un pase llvm con gdb
- 26. Usar C2DM en Android-x86
- 27. gcc: habilitar los símbolos de depuración en la biblioteca compartida
- 28. mensaje GDB raro cuando la depuración de programa en C++
- 29. ¿Ver el código fuente de un "Servidor de símbolos" sin depuración?
- 30. Depuración de código de usuario en xv6 con gdb
+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