¿Cómo puedo examinar el contenido de una sección de datos de un archivo ELF en Linux?
-
18-09-2019 - |
Pregunta
He estado usando objdump
mirar el código de montaje en los binarios Linux ELF.
A veces hay un salto indirecto a través de una tabla de saltos que se almacena en la sección de rodata
(datos de sólo lectura).
Como llegar objdump
o cualquier otra herramienta que me mostrara el contenido de esta sección de datos?
Yo podría ejecutar el programa y examinar las direcciones pertinentes en el depurador, pero yo no quiero hacer eso, ya que se tiene que hacer de forma interactiva.
La respuesta ideal deberá identificar una herramienta que no sólo me mostrará el contenido, pero me permita controlar el formato de visualización, tanto como od
hace.
Solución
objdump -s -j .rodata exefile
da un hexágono / volcado ASCII imprimible de lado a lado de los contenidos de la sección rodata
como:
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
No parece que haya algo allí para controlar el formato, pero es un comienzo. Siempre se puede undump el hexágono y alimentar a OD, supongo:)
Otros consejos
readelf -x .rodata hello_world.o
da:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
Usted debe preferir readelf
cuando sea posible, ya objdump
simplemente no se muestran algunas secciones como .symtab
: ¿Por qué no mostrar objdump .bss, .shstratab, .symtab y secciones .strtab?
También puede extraer los bytes primas con las técnicas mencionadas en: ¿Cómo extraer sólo el contenido de una sección ELF y como se mencionó por ysdx .
Usted puede obtener el RAW (no Hexdump-ed) sección ELF con:
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
Aquí estoy usando | cat
con el fin de forzar la salida estándar a ser un tubo. /dev/stdout
podría funcionar inesperadamente si la salida estándar es un archivo. .text=-
no envía a la salida estándar, pero en el fichero de -
.
Sin embargo objcopy y objdump tienen algunas deficiencias (debido a que se basan en BFD que abstrae diferentes formatos ejecutables).
Actualización: Me escribió una herramienta rel="noreferrer"> para hacer esto que no se basa en BFD.