web-dev-qa-db-ja.com

実行可能ファイルを完全に取り除く方法

できる限りストリップしたいのですが、LinuxではELFです。実行するために必要なものだけが必要です。

stripを使ってみました:

strip --strip-all elf

しかし、それは良い仕事をしていないようです:nmはまだたくさんのものを表示し、バイナリはまだ大きいです。

私は何をすべきか?

36
peoro

他のすべてが失敗した場合、man stripで始まるドキュメントを読むことができます。

真剣に、おそらくあなたのアプリケーションは多くのシンボルとコードを持っています。極端な場合、最大のサイズ削減はrm elfになりますが、プログラムは実行できなくなります。それはすべてyour programとそれにコーディングした内容に依存します。

具体的な例として、私は最近、stripがさらに引数を指定せずにサイズを400 + mbから約28mbに削減した大きなC++ライブラリを使用して作業しました。しかし、それから(他の共有ライブラリのコンテキストで)それに対してリンクすることができなくなり、ある程度役に立たなくなりました。

ただし、strip --strip-unneededを使用すると、サイズが400+ mbから55 mbに変更されますが、これはかなりの量ですが、他の共有ライブラリからライブラリにアクセスできます。

つまり、stripを信頼します。コードを変更しない限り、アプリケーションをこれ以上縮小することはできません。

36

-Rオプションを使用してストリップすると、不要なセクションをすべて除去できます。最小のELF実行可能ファイルに関しては this も参照してください。

15
yorick

ELF実行ファイルを可能な限り小さくすることについて深く掘り下げたこの素晴らしい記事をチェックしてみます。多分それは助けることができる情報を持っています!

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html

7
ossys
strip -R .comment
gcc -Os elf.c

これらの2つが役立つ場合があります。

1
krzysz00