[ファイル オフセット] 列は、アーカイブ内のオブジェクト ファイルの位置に関連しているように見えます
取得するファイル オフセットobjdump
は、個々のオブジェクト ファイルの先頭に相対的です。アーカイブ ライブラリは本棚と考えることができ、出力はobjdump -h
個々の本の中のインデックスと考えることができます。棚に他の本があるか、棚から本を取り出すかによって索引が変わるとは思わないでしょう。同様に、オブジェクト ファイル自体 (および の出力objdump -h
) は、ライブラリに配置したり、再度抽出したりしても変更されません (ビットが同じコピーが得られます)。
dd を使用して、アーカイブ ファイルからバイナリ情報を抽出できると思っていました
を使用することもできdd
ますが、最初にアーカイブ内の個々のオブジェクト ファイルの位置を見つける必要があります。それはそれほど難しいことではありません。UNIX アーカイブ ファイルの形式はドキュメントに記載されています。ただし、使用する UNIX バリアントによって形式が変わる可能性があり、実行するタスクには必ずしも必要ではありません。
アーカイブでこれを行うにはどうすればよいですか?
(指定したコマンドの場合のように) の.mysection
すべてのオブジェクト ファイルに同一の内容があることがわかっている場合は、アーカイブから1 つのオブジェクトを抽出し、セクションを抽出します。libmylib.a
objcopy --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.$$