linux 解析 ELF セクションの生の内容のみを抽出する方法は?




readelf 見方 (3)

-O binary出力形式を使用します。

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

avr-objcopyとAVR ELFイメージの.textセクションで確認しavr-objcopy

Timが下で指摘したように、セクションにALLOCフラグがない場合、それを抽出できるようにするには--set-section-flags .text=allocを追加する必要があるかもしれないことに--set-section-flags .text=allocてください。

私は以下を試しましたが、結果のファイルはELFであり、純粋にセクションの内容ではありません。

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

私はちょうどセクションの内容が欲しい。 これを行うことができるユーティリティはありますか? 何か案は?


むしろ、 objdumpdd周りのobjdumpないハック:

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は、elfファイルのセクションオフセットを含む予測可能な出力を生成します。 ddは16進数をサポートしていないので、 awkにシェル用のddコマンドを生成させました。 コマンドをシェルに送りました。

これまでほとんどの場合、スクリプトを作成することなく手動で行いました。


objcopy --dump-section

Binutils 2.25で導入され、 -O binary --only-sectionと同様の効果が得られます。

使用法:

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

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.htmlそれを次のように文書化します:

--dump-sectionセクション名=ファイル名

sectionnameという名前のセクションの内容をファイルfilenameに置き、以前にあった可能性のある内容を上書きします。 このオプションは--add-sectionの逆です。 このオプションは--only-sectionオプションに似ていますが、フォーマットされたファイルを作成せず、再配置を適用せずに内容を生のバイナリデータとしてダンプするだけです。 このオプションは複数回指定できます。

最小実行可能な例

として:

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

組み立てて抽出する:

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

出力:

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

Ubuntu 18.04 amd64、Binutils 2.30でテストされています。







binutils