GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo extraer solo el contenido sin procesar de una sección ELF?

Truco bastante poco elegante alrededor de 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 un desplazamiento de sección en el archivo elf. Hice el awk para generar un dd comando para el shell, desde dd no admite números hexadecimales. Y envió el comando al shell.

En el pasado, hice todo eso manualmente, sin crear ningún script, ya que rara vez se necesita.


Usa el -O binary formato de salida:

objcopy -O binary --only-section=.text foobar.elf foobar.text

Recién verificado con avr-objcopy y una imagen AVR ELF .text sección.

Tenga en cuenta que si, como señala Tim a continuación, su sección no tiene el indicador ALLOC, es posible que deba agregar --set-section-flags .text=alloc para poder extraerlo.


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-section nombre_sección=nombre_archivo

Coloque el contenido de la sección denominada nombre de sección en el archivo nombre de archivo, sobrescribiendo cualquier contenido que pueda haber estado allí anteriormente. Esta opción es la inversa de --add-section. Esta opción es similar a la opción --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

principal.S

.data
    .byte 0x12, 0x34, 0x56, 0x78
.text
    .byte 0x9A, 0xBC, 0xDE, 0xF0

Ensamblar:

as -o main.o main.S

Extraer datos:

objcopy --dump-section .data=data.bin main.o
hd data.bin

Salida:

00000000  12 34 56 78                                       |.4Vx|
00000004

Extraer texto:

objcopy --dump-section .text=text.bin main.o
hd text.bin

Salida:

00000000  9a bc de f0                                       |....|
00000004

Probado en Ubuntu 18.04 amd64, Binutils 2.30.


Linux
  1. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

  2. ¿Cómo insertar un texto al principio de un archivo?

  3. ¿Cómo extraigo el contenido de un rpm?

  4. ¿Cómo extraer texto con OCR de un PDF en Linux?

  5. ¿Cómo mostrar el contenido del archivo de forma recursiva?

Cómo enumerar el contenido de un paquete en Linux

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Cómo extraer direcciones de correo electrónico de un archivo de texto en Linux

Cómo agregar texto al comienzo del archivo en Linux

Cómo instalar la última versión del editor de texto nano

Cómo eliminar el texto seleccionado en el editor vi