ページ 1 / 1
実行fileを最小化
Posted: 2016年10月29日(土) 11:20
by da0
実行fileを最小化するにはどのようにcompileすればよいのでしょうか?
gcc v4.8.1を使っていますが main(){} とだけ記述しても17.5kbになります(gcc -sでcompile)。
しかし巷では1kb以下の実行fileも見かけられます
Re: 実行fileを最小化
Posted: 2016年10月29日(土) 11:38
by あんどーなつ
面白い課題ですね。Visual Studioの話ですけど、デフォルトのコンパイルオプションではCの標準ライブラリの
バイナリがくっついてしまうらしいです。gccのツールで実行ファイルを逆アセンブルするのがあったと思います。
それで何が贅肉になっているか見てみるといいでしょう。
Re: 実行fileを最小化
Posted: 2016年10月29日(土) 11:45
by あんどーなつ
しかし1kB以下の実行ファイルを作りたいなんて、セキュリティコンペに出場なさるのでしょうか?
今時100kBでも読み込みは一瞬ですよ。
Re: 実行fileを最小化
Posted: 2016年10月29日(土) 12:24
by みけCAT
ハンドコンパイル(実行fileの形式の資料を読みながらバイナリエディタで手書き)という方法が考えられます。
実行fileを生成するプログラムを自分で書いてもいいかもしれません。
対象のOSは何ですか?
Re: 実行fileを最小化
Posted: 2016年10月29日(土) 16:39
by da0
1kb以下にしたいという訳ではないですが、無駄に大きくなるのが不思議だったもので。
実行fileを生成するプログラムを書くというのは面白そうですが敷居が高そう。
OSはWindowsXPです
Re: 実行fileを最小化
Posted: 2016年10月29日(土) 22:07
by あんどーなつ
実行ファイル(.exe)のファイルサイズは、ロード時のオーバーヘッドが一番の問題になります。
これを解消するには、実行ファイルのサイズを小さくする他、
ロードのタイミングを分散させてやることも効果的です。
ネイティブアプリケーションの場合、実行ファイルのコードをDLLのほうに移してやり、
明示的リンク(動的リンク)をすることが考えられます。
.net Frameworkのアプリケーション(C#等)の場合、JITコンパイルの仕組みにより
最初からロードタイミングは分散されています。
また、OSで用意している.dllを多数使うので実行ファイルのサイズも小さかったりします。
ご参考までに