Question

Je l'ai essayé ce qui suit, mais le fichier résultant est encore un ELF et non uniquement le contenu de la section.

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

Je veux juste le contenu de la section. Y at-il utilitaire qui peut le faire? Toutes les idées?

Était-ce utile?

La solution

plutôt inélégante pirater autour 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" $3 "] skip=$[0x" $6 "]"}' |
  bash

Le objdump -h produit une sortie prévisible qui contient la section de décalage dans le fichier ELF. J'ai fait l'awk pour générer une commande dd pour la coque, car dd ne supporte pas les nombres hexadécimaux. Et alimenté la commande à corps.

Dans le passé, je l'ai fait tout ce que manuellement, sans faire de scripts, car il est rarement nécessaire.

Autres conseils

Utilisez le format de sortie -O binary:

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

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

Notez que si, comme le souligne Tim ci-dessous, votre section n'a pas le drapeau ALLOC, vous pouvez avoir à ajouter --set-section-flags .text=alloc pour pouvoir l'extraire.

objcopy --dump-section

Introduit dans Binutils 2,25, et permet d'obtenir 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 documents en tant que:

  

- vidage section sectionname = nom de fichier

     

Placez le contenu de l'article nommé sectionname dans le nom de fichier de fichier, tout contenu qui en écrasant peut avoir été là auparavant. Cette option est l'inverse de --add-section. Cette option est similaire à l'option --only section, sauf qu'il ne crée pas un fichier formaté, il déverse tout le contenu sous forme de données binaires brutes, sans appliquer les délocalisations. L'option peut être spécifiée plus d'une fois.

Exemple minimal runnable

main.S

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

Assemblez:

as -o main.o main.S

Extraire des données:

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

Sortie:

00000000  12 34 56 78                                       |.4Vx|
00000004

texte Extrait:

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

Sortie:

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

Testé dans Ubuntu 18.04 amd64, Binutils 2.30.

Dump toutes les sections dans des fichiers séparés.

readelf -a filename|grep "NULL\|LOAD"| (x=0;while read a;do echo "$x $a"|awk '{print "dd if=143 of=filename.section."$1" bs=1 skip=$((" $3")) count=$(("$6"))"}';let x=x+1;done)|bash
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top