¿Cómo extraer solo el contenido en bruto de una sección de ELFOS?
He intentado lo siguiente, pero el archivo resultante sigue siendo un ELFO y no puramente el contenido de la sección.
$ objcopy --only-section=<name> <infile> <outfile>
Solo quiero el contenido de la sección. ¿Hay alguna utilidad que pueda hacer esto? Alguna idea?
3 answers
Bastante poco elegante hack alrededor objdump
y dd
:
IN_F=/bin/echo
OUT_F=./tmp1.bin
SECTION=.text
objdump -h $IN_F |
grep $SECTION |
awk '{print "dd if='$IN_F' of='$OUT_F' bs=1 count=$[0x" $3 "] skip=$[0x" $6 "]"}' |
bash
El objdump -h
produce una salida predecible que contiene el desplazamiento de sección en el archivo elf. Hice el awk
para generar un comando dd
para el shell, ya que dd
no soporta números hexadecimales. Y alimentó el comando a shell.
En el pasado hice todo eso manualmente, sin hacer ningún script, ya que rara vez se necesita.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-13 15:56:32
Utilice el formato de salida -O binary
:
objcopy -O binary --only-section=.text foobar.elf foobar.text
Solo verificado con avr-objcopy
y la sección de una imagen de AVR ELF .text
.
Tenga en cuenta que si, como Tim señala a continuación, su sección no tiene la bandera ALLOC, es posible que tenga que agregar --set-section-flags .text=alloc
para poder extraerla.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-08 12:32:22
objcopy --dump-section
Introducido en Binutils 2.25, y logra un efecto similar a -O binary --only-section
.
Uso:
objcopy --dump-section .text=output.bin input.o
Https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html lo documenta como:
Dump dump-section sectionname = filename
Coloque el contenido de la sección llamada sectionname en el archivo filename, sobrescribiendo cualquier contenido que pueda haber estado allí anteriormente. Esta opción es la inversa de add add-section. Esta opción es similar a la opción only only-section, excepto que no crea un archivo formateado, simplemente vuelca el contenido como datos binarios sin procesar, sin aplicar ninguna reubicación. La opción se puede especificar más de una vez.
Ejemplo ejecutable mínimo
A. S:
.data
.byte 0x12, 0x34, 0x56, 0x78
.text
.byte 0x9A, 0xBC, 0xDE, 0xF0
Ensamblar y extraer:
as -o a.o a.S
objcopy --dump-section .data=data.bin a.o
objcopy --dump-section .text=text.bin a.o
hd data.bin
hd text.bin
Salida:
00000000 12 34 56 78 |.4Vx|
00000004
00000000 9a bc de f0 |....|
00000004
Probado en Ubuntu 18.04 amd64, Binutils 2.30.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-19 10:48:22