2017-02-17 3 views
0

.exeファイルを中間言語に逆アセンブルすると、実行ファイルよりも小さなダンプを取得するのはなぜですか?静的にリンクされたコードが含まれていないためですか?ILファイルを.exeファイルよりも小さくダンプするのはなぜですか?

+0

.exeファイルには、ダンプしていない[resources](http://stackoverflow.com/q/90697/501250)も含まれている可能性があります。これは大文字と小文字が区別されます。すべての.exeファイルがダンプされたILより大きいわけではありません。 – cdhowie

+0

@cdhowie、空の空のクラスの場合主な機能の違いは2kbです。 –

+0

いいえ、私はどのような種類の情報をexeに含めることができるかを理解していますが、2kbです。私も見逃していた、参照コードの可視性/カウント。それは明らかに各機能のどこかに存在しなければならない。 –

答えて

3

EXEファイルにはバイナリプログラムコードだけが含まれているわけではありません。また、埋め込みリソース、静的にリンクされたライブラリ、文字列、ヘッダー、メタデータ情報、シンボルテーブル/デバッグ情報、その他多くのものを含むことができます。

また、コンパイルは最適化段階を経るため、コードを最適化するためにコードが変換される可能性があります。逆アセンブルされたコードは、元のソースコードと1対1で一致しないことがあります。

+0

私はILがjitの前にコードサイズを増やす方法で最適化されているかどうかはわかりません。たとえば、C#コンパイラの最適化の焦点は、コードサイズの縮小(変数の削除などの多くの最適化が含まれています)にありました。 Lippertはこれをさらに完全に拡張することができますが、おそらくそれがあります。 – hoodaticus

+1

私はこれをC++コンパイラと混同しているかもしれませんが、以前はスイッチ[-O1と-O2](https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx)が使われていたと思います実行可能ファイルのサイズを最小化するか、実行可能ファイルの速度を最大化するかのいずれかに最適化します。 – Icemanind

+0

これらは間違いなくC++のスイッチです、とても素敵です:) – hoodaticus

関連する問題