11

Linuxでは、静的にリンクされたELFファイルを必要最低限​​のものに取り除こうとしています。私が走るとき:

strip --strip-unneeded foo

また

strip --strip-all foo

結果のファイルには、ファンキーな文字列でいっぱいのように見える太い.notesセクションがまだあります。

.notesセクションは本当に必要ですか、それとも--remove-sectionで安全に強制的に削除できますか?

助けてくれてありがとう。

4

1 に答える 1

11

経験とmanページを見ると、不要なセクションや文字列をすべて削除することは想定されていないstripようです。ただの記号。マニュアルページを引用してください:strip

   GNU strip discards all symbols from object files objfile.

そうは言っても、経験から、、がstripなくても、や--strip-allなどのロードに不要なセクションを削除します。また、ご存知のように、を使用して必要なセクションを削除できます。.symtab.strtab--remove-section

.notesセクションの例として、/bin/lsUbuntu11.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ます。stripELFには任意の数の追加データが含まれている可能性があるため、プログラムをロードするために必要ではないが、標準ではなく、プログラムを適切に実行するために必要ではないことが知られていないデータが含まれているようです。削除しても安全ではない「不明な」セクション。したがって、仮想ホワイトリスト(惨めに失敗する)を使用するのではなく、削除できることがわかっているセクションのブラックリストを使用します。

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

于 2012-02-23T15:53:13.567 に答える