Linuxでは、静的にリンクされたELFファイルを必要最低限のものに取り除こうとしています。私が走るとき:
strip --strip-unneeded foo
また
strip --strip-all foo
結果のファイルには、ファンキーな文字列でいっぱいのように見える太い.notesセクションがまだあります。
.notesセクションは本当に必要ですか、それとも--remove-sectionで安全に強制的に削除できますか?
助けてくれてありがとう。
経験とmanページを見ると、不要なセクションや文字列をすべて削除することは想定されていないstrip
ようです。ただの記号。マニュアルページを引用してください:strip
GNU strip discards all symbols from object files objfile.
そうは言っても、経験から、、がstrip
なくても、や--strip-all
などのロードに不要なセクションを削除します。また、ご存知のように、を使用して必要なセクションを削除できます。.symtab
.strtab
--remove-section
.notes
セクションの例として、/bin/ls
Ubuntu11.1064ビットボックスから取得しました。
$ 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
できるため、削除しても安全かどうかわかりません。しかし、私が上で取ったものの中の情報に基づいて、それがあなた自身のプログラムであるならば、それを取り除くことはほぼ確実に安全です。