Comment extraire uniquement le contenu brut d'une section ELF?

j'ai essayé ce qui suit, mais le fichier résultant est toujours un ELF et pas seulement le contenu de la section.

$ objcopy --only-section=<name> <infile> <outfile>

je veux juste le contenu de la section. Est-il un utilitaire qui peut faire cela? Des idées?

22

3 réponses

plutôt inélégant hack autour de objdump et 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"  "] skip=$[0x"  "]"}' |
  bash

le objdump -h produit une sortie prévisible qui contient la compensation de section dans le fichier elf. J'ai fait le awk pour générer une commande dd pour le shell, puisque dd ne supporte pas les nombres hexadécimaux. Et a donné le commandement à shell.

dans le passé j'ai fait tout cela manuellement, sans faire de scripts, car il est rarement nécessaire.

18
répondu Dummy00001 2010-10-13 15:56:32

utiliser le -O binary format de sortie:

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

vient de vérifier avec avr-objcopy et la section .text d'une image AVR.

notez que si, comme Tim le fait remarquer ci-dessous, votre section n'a pas le flag ALLOC, vous devrez peut-être ajouter --set-section-flags .text=alloc pour pouvoir l'extraire.

43
répondu ndim 2011-06-08 12:32:22

objcopy --dump-section

introduit dans les Binutils 2.25, et atteint un effet similaire à -O binary --only-section .

Utilisation:

objcopy --dump-section .text=output.bin input.o

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html le documente comme suit:

--dump-section nom de section=nom de fichier

placer le contenu de la section nommée sectionname dans le nom du fichier, en écrasant tout contenu qui aurait pu s'y trouver auparavant. Cette option est l'inverse de --add-section. Cette option est similaire à l'option --only-section sauf qu'elle ne crée pas de fichier formaté, elle vide simplement le contenu en données binaires brutes, sans appliquer de relocalisations. L'option peut être spécifié plus d'une fois.

exemple de fonctionnement Minimal

A. S:

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

assembler et extraire:

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

sortie:

00000000  12 34 56 78                                       |.4Vx|
00000004
00000000  9a bc de f0                                       |....|
00000004

testé dans Ubuntu 18.04 amd64, Binutils 2.30.

13