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.

¿Fue útil?

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.

scroll top