2011-03-30 12 views
6

Ok ... así que estoy trabajando en la depuración en x86 con gdb. Los archivos en cuestión están eliminados por lo que no tengo símbolos del propio binario. No tengo acceso al código fuente, pero tengo una idea aproximada de lo que sucede debajo del capó.Agregar símbolos propios para el archivo en gdb

Mi conocimiento asm es lo suficientemente bueno como para decidir el propósito de una función y decidir su propósito. Por lo tanto, puedo decidir mis propios nombres para las funciones después de mirarlos por un tiempo, pero me gustaría poder insertarlos como símbolos para que una vez decididos puedan usarse en depuración posterior ...

Does ¿Alguien sabe cómo cargar símbolos personalizados en gdb? He considerado recompilar gdb y agregar un comando extra a la interfaz de usuario para permitir la carga de un símbolo en una dirección. Me preguntaba si sería posible crear un archivo de objeto ficticio con los símbolos que he definido y luego cargarlo usando add-symbol-file? ¿O sería posible compilar un programa c con función ficticia y cómo forzarlos a ser del tamaño correcto y en la ubicación correcta y luego simplemente cargar eso?

+1

¿Intentó generar archivos de símbolos externos usted mismo a partir de los datos que recopiló? mira aquí: http://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html#Separate-Debug-Files y aquí: http://sigquit.wordpress.com/2008/09/15/debugging -programs-with-a-external-symbol-file/ – thang

+0

Vea también [Cómo deshacer la tira - es decir, agregar símbolos de nuevo al binario eliminado] (https://stackoverflow.com/q/15977961/1362755) – the8472

Respuesta

0

No buscaría una solución en gdb. En cambio, trataría de descubrir cómo volver a poner los símbolos en el binario. Lógicamente, si es posible quitar los símbolos, entonces debe ser posible volver a agregarlos. Esperaría linker (ld) o alguna otra herramienta para permitir eso.

Recomiendo comprobar todas las herramientas del paquete binutils (objdump, objcopy, nm, ld, ...) - ¡son capaces de muchas cosas casi milagrosas!

Tomas

+0

ld tiene de hecho un - Opción dedefsym Entonces lo haría en un maniquí a.out (como ld a.out --defsym whatever = 0x1111) y luego cargar eso a través de add-symbol-file – flolo

+0

Pero eso no agrega símbolos de función, solo símbolos absolutos – gigasai

0

Esto suena como tiene que ser una tarea fácil, pero resulta ser sorprendentemente molesto, sobre todo porque ELF como un formato de archivo es molesto para generar, por lo que la mayoría de las herramientas están contentos con analizarlo.

Como se describe here, GDB lee la información de símbolos a partir de dos lugares, primero alguna información mínima por parte de los símbolos en el .symtab y/o .dynsym secciones, y la información después más detallada de la sección de .debug_info si está presente.

Esto inmediatamente sugiere dos formas posibles de agregar la información, ya sea agregue el símbolo a .symtab o genere su propia información DWARF incluyendo el símbolo.

Sin embargo, la generación de ENANO desde cero parece ser un caso de uso muy poco frecuente, por lo que el único enfoque de trabajo que he encontrado hasta ahora es utilizar objcopy para añadir el símbolo para el binario en sí:

objcopy a.out --add-symbol function_name=.text:0x900,function,global a.out2 

Tenga en cuenta que gdb no le gusta símbolos absolutos para funciones, tuve que especificarlo como un desplazamiento en la sección .text para ser útil (es decir, poder establecer puntos de interrupción en la función y hacer que aparezca en trazas inversas)

También , No pude encontrar ninguna forma de modificar el campo "tamaño" del símbolo.

Cuestiones relacionadas