GNU/Linux >> Znalost Linux >  >> Linux

Jak extrahovat pouze surový obsah sekce ELF?

Poněkud nevkusný hack kolem objdump a 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

objdump -h vytváří předvídatelný výstup, který obsahuje offset sekce v souboru elf. Vytvořil jsem awk vygenerovat dd příkaz pro shell, od dd nepodporuje hexadecimální čísla. A předal příkaz shellu.

V minulosti jsem to všechno dělal ručně, bez vytváření jakýchkoli skriptů, protože je to zřídka potřeba.


Použijte -O binary výstupní formát:

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

Právě ověřeno pomocí avr-objcopy a .text obrazu AVR ELF sekce.

Všimněte si, že pokud, jak ukazuje Tim níže, vaše sekce nemá příznak ALLOC, možná budete muset přidat --set-section-flags .text=alloc abyste jej mohli extrahovat.


objcopy --dump-section

Zavedeno v Binutils 2.25 a dosahuje podobného efektu jako -O binary --only-section .

Použití:

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

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html dokumentuje jako:

--dump-section název sekce=název souboru

Umístěte obsah sekce s názvem sectionname do názvu souboru a přepište veškerý obsah, který tam mohl být dříve. Tato volba je opakem --add-section. Tato volba je podobná volbě --only-section s tím rozdílem, že nevytváří formátovaný soubor, pouze vypíše obsah jako nezpracovaná binární data bez použití jakýchkoli přemístění. Možnost lze zadat více než jednou.

Minimální spustitelný příklad

hlavní.S

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

Sestavení:

as -o main.o main.S

Extrahujte data:

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

Výstup:

00000000  12 34 56 78                                       |.4Vx|
00000004

Extrahujte text:

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

Výstup:

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

Testováno v Ubuntu 18.04 amd64, Binutils 2.30.


Linux
  1. Jak získat pouze počet řádků souboru

  2. Jak extrahovat text pomocí OCR z PDF na Linuxu?

  3. Jak rekurzivně zobrazit obsah souboru?

  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Jak vložit text před první řádek souboru?

  3. Jak extrahovat text z velkého souboru počínaje prvním výskytem řetězce?

  1. Jak vložit text na začátek každého řádku ve Vimu

  2. Kde je obsah popisu mužských sekcí?

  3. Příkaz Linux:Jak „najít“ pouze textové soubory?