31

次のことを試しましたが、結果のファイルはまだELFであり、純粋にセクションのコンテンツではありません。

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

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

4

4 に答える 4

63

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

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

avr-objcopyとAVRELF画像の.textセクションで検証されました。

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

于 2010-10-13T15:04:56.237 に答える
28

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

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

実行可能な最小限の例

main.S

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

組み立てる:

as -o main.o main.S

データの抽出:

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

出力:

00000000  12 34 56 78                                       |.4Vx|
00000004

テキストの抽出:

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

出力:

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

Ubuntu 18.04 amd64、Binutils2.30でテスト済み。

于 2015-09-04T13:32:41.250 に答える
17

むしろエレガントでないハックobjdumpdd

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ファイルのセクションオフセットを含む予測可能な出力を生成します。16進数をサポートしていないため、シェルのコマンドawkを生成するように作成しました。そして、コマンドをシェルに送りました。dddd

以前は、スクリプトが必要になることはめったにないため、スクリプトを作成せずにすべてを手動で実行していました。

于 2010-10-13T15:56:32.100 に答える
0

すべてのセクションを別々のファイルにダンプします。

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
于 2019-06-05T17:51:05.327 に答える