1

Linux で .a ELF アーカイブ ファイルからバイナリ セクションを抽出したいと考えています。

アーカイブ ファイルに対して objdump -h を実行すると、アーカイブ ファイルに含まれるオブジェクト ファイルと、各セクションのセクション ヘッダーが一覧表示されます。ただし、[ファイル オフセット] 列は、アーカイブ内のオブジェクト ファイルの位置に関連しているように見えます。そうしないと、すべてのセクションが重なってしまうからです。

dd を使用して、アーカイブ ファイルからバイナリ情報を抽出できると思っていました。( ELF セクションのコンテンツのみを抽出する方法を参照してください)。アーカイブでこれを行うにはどうすればよいですか?

また、抽出しているセクションがこのコマンドで追加されることにも言及する必要があります。

echo "hi" > commentFile
objcopy libmylib.a --add-section .mysection=commentFile libmylib.a
4

1 に答える 1

2

[ファイル オフセット] 列は、アーカイブ内のオブジェクト ファイルの位置に関連しているように見えます

取得するファイル オフセットobjdumpは、個々のオブジェクト ファイルの先頭に相対的です。アーカイブ ライブラリは本棚と考えることができ、出力はobjdump -h個々の本の中のインデックスと考えることができます。棚に他の本があるか、棚から本を取り出すかによって索引が変わるとは思わないでしょう。同様に、オブジェクト ファイル自体 (および の出力objdump -h) は、ライブラリに配置したり、再度抽出したりしても変更されません (ビットが同じコピーが得られます)。

dd を使用して、アーカイブ ファイルからバイナリ情報を抽出できると思っていました

を使用することもできddますが、最初にアーカイブ内の個々のオブジェクト ファイルの位置を見つける必要があります。それはそれほど難しいことではありません。UNIX アーカイブ ファイルの形式はドキュメントに記載されています。ただし、使用する UNIX バリアントによって形式が変わる可能性があり、実行するタスクには必ずしも必要ではありません。

アーカイブでこれを行うにはどうすればよいですか?

(指定したコマンドの場合のように) の.mysectionすべてのオブジェクト ファイルに同一の内容があることがわかっている場合は、アーカイブから1 つのオブジェクトを抽出し、セクションを抽出します。libmylib.aobjcopy --add-section

firstobj=$(ar t libmylib.a | grep '\.o$' | head -1)
ar x libmylib.a $firstobj
# use objdump -h and dd to extract section context.
# or use "readelf -p .mysection $firstobj
rm -f $firstobj

オブジェクト ファイルごとにの内容.mysectionが異なる可能性がある場合は、それらを一時ディレクトリに抽出します。

mkdir tmp.$$ && cd tmp.$$ && ar x ../libmylib.a
for obj in $(find . -type f); do
  # extract .mysection from $obj
done
cd .. && rm -rf tmp.$$
于 2012-10-13T15:43:10.980 に答える