GNU/Linux >> Linux の 問題 >  >> Linux

ELF セクションの生のコンテンツのみを抽出する方法は?

objdump 周りのかなり洗練されていないハック そして 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 elf ファイルのセクション オフセットを含む予測可能な出力を生成します。 awk にしました dd を生成する dd 以降のシェルのコマンド 16 進数をサポートしていません。コマンドをシェルに送りました。

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


-O binary を使用 出力形式:

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

avr-objcopy で検証済み および AVR ELF イメージの .text

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


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=ファイル名

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、Binutils 2.30 でテスト済み。


Linux
  1. ファイルの先頭にテキストを挿入する方法は?

  2. rpm の内容を抽出するにはどうすればよいですか?

  3. LinuxでPDFからOCRでテキストを抽出するには?

  1. ファイルの内容を再帰的に表示するには?

  2. 文字列の最初の出現から始めて、大きなファイルからテキストを抽出する方法は?

  3. PDF 内のすべてのテキストをラスタライズするにはどうすればよいですか?

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. Vimの各行の先頭にテキストを挿入する方法

  3. ファイルの最初の行の前にテキストを挿入する方法は?