2012-02-22 20 views
4

Linuxでは、静的にリンクされたELFファイルを裸の必需品に削除しようとしています。私は実行すると:ELF .notesセクションは本当に必要ですか?

strip --strip-unneeded foo 

または

strip --strip-all foo 

結果のファイルがまだファンキーな文字列の完全なように見える脂肪.notes部を有し

.notesセクションは本当に必要ですか?安全に--remove-sectionを使って強制的に削除することはできますか?

ありがとうございました。

答えて

5

経験からとstripのmanページを見てから、それはstripのように見えるがないが必要とされていない任意およびすべてのセクションと文字列を取り除くことになって。ただ記号。あなたが注意しても--strip-allせずに、このよう.symtab.strtabとして、ロードするための不要なセクションを削除し、次のことができ、経験、stripから、言われていること

GNU strip discards all symbols from object files objfile. 

、削除:manページquothがあなたが望むセクションは--remove-sectionです。

.notes部の一例として、私は私のUbuntu 11.10 64ビット・ボックスから/bin/lsを取った:

$ readelf -Wn /bin/ls 

Notes at offset 0x00000254 with length 0x00000020: 
    Owner     Data size Description 
    GNU     0x00000010 NT_GNU_ABI_TAG (ABI version tag) 
    OS: Linux, ABI: 2.6.15 

Notes at offset 0x00000274 with length 0x00000024: 
    Owner     Data size Description 
    GNU     0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) 
    Build ID: 3e6f3159144281f709c3c5ffd41e376f53b47952 

.note.ABI-tag部と.note.gnu.build-idセクションを包含する。プログラムをロードする必要はないが、標準ではないデータが含まれているように見えます。プログラムの適切な実行にはstripが必要でないことは知られていません。ELFには削除しても安全でない追加の「未知の」セクション。だからむしろ仮想ホワイトリスト(悲惨に失敗する)を使用して、それはそれが取り除くことができることを知っているセクションのブラックリストを使用し、そうします。

短いバージョン:これらのセクションは標準ではないようで、さまざまな用途に使用できるため、stripは削除するのが安全かどうかわかりません。しかし、私が上記で取った情報に基づいて、あなた自身のプログラムであれば、それを削除することはほぼ確実です。

+0

ありがとうございます。私には理にかなっています。 – srking

+0

.note.gnu.build-idのいくつかの言及は、https://fedoraproject.org/wiki/Releases/FeatureBuildIdです。人々は何をしていますか:https://lkml.org/lkml/2011/12/ 15/162 – pfalcon

+1

strip --remove-section = .note.gnu.build-id

関連する問題