Miscelaneos
ldd
ldd
es el comando en linux para determinar las librerias compartidas que necesita un programa. Ejemplo, el ejecutablea.out
hace uso de 3 librerías.
$ ldd ./a.out
linux-gate.so.1 => (0xf7eef000)
libc.so.6 => /lib32/libc.so.6 (0xf7d18000)
/lib/ld-linux.so.2 (0xf7ef1000)
- la librería
libc.so.6
es donde vivenprintf
,scanf
. - las otras dos son necesarias para algunas de las funciones que se invocan previo a y después de
main
. A continuación un diagrama de ejecución de esas funciones, tomado de http://dbp-consulting.com/tutorials/debugging/images/callgraph.png
gdb en formato Intel
set disassembly-flavor att
set disassembly-flavor intel
show disassembly-flavor
display el valor hex del contenido de la memoria apuntada por $ebp-0x13
display /x *(int *)($ebp-0x13)
dashboard el valor hex del contenido de la memoria apuntada por $ebp-0x13
dashboard expression watch /x *(int *)($ebp-0x13)
objdump para disassemble una sola función
objdump --disassemble=main executable -M intel
objdump para ver una sola sección
objdump -s -j .rodata executable
dashboard expressions clear