web-dev-qa-db-fra.com

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

J'ai essayé ce qui suit, mais le fichier résultant est toujours un elfe et non purement le contenu de la section.

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

Je veux juste le contenu de la section. Y a-t-il une utilité qui peut faire cela? Des idées?

26
mepcotterell

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" $3 "] skip=$[0x" $6 "]"}' |
  bash

Les objdump -h Produit une sortie prévisible contenant une section décalée dans le fichier ELF. J'ai fait le awk pour générer une commande dd pour la coquille, puisque dd ne prend pas en charge les numéros hexadécimaux. Et nourri la commande de shell.

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

19
Dummy00001

Utilisez le -O binary format de sortie:

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

Juste vérifié avec avr-objcopy et une image d'AVR elfe .text section.

Notez que si, comme indiqué TIM ci-dessous, votre section n'a pas le drapeau Alloc, vous devrez peut-être ajouter --set-section-flags .text=alloc Pour pouvoir l'extraire.

47
ndim

Démarrez 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
0
Zibri