2017-02-17 1 views
0

Lorsque je désassemble un fichier .exe en langage intermédiaire, pourquoi ai-je un fichier de vidage plus petit que l'exécutable? Est-ce parce que le code lié statiquement n'est pas inclus?Pourquoi les fichiers IL sont-ils plus petits que les fichiers .exe?

+0

Cela peut être dû au fait que le fichier .exe contient également [ressources] (http://stackoverflow.com/q/90697/501250) que vous n'avez pas sauvegardé. Ce sera au cas par cas - tous les fichiers .exe ne seront pas plus grands que leur IL. – cdhowie

+0

@cdhowie, pour une classe vide avec vide La différence de fonction principale est 2kb. –

+0

non, je réalise quel type d'information peut être inclus dans exe, mais 2kb. Ce que j'ai aussi manqué, c'est que le code sur les références de visibilité/comptage. il doit évidemment exister quelque part dans chaque fonction. –

Répondre

3

Les fichiers EXE ne contiennent pas seulement le code de programme binaire. Il peut également contenir des ressources intégrées, des bibliothèques liées statiquement, des chaînes, un en-tête, des informations de métadonnées, une table de symboles/informations de débogage et bien d'autres choses.

De plus, gardez à l'esprit que la compilation passe par une phase d'optimisation qui pourrait transformer votre code afin de l'optimiser. Le code démonté peut ne pas correspondre à 1 à 1 avec votre code source d'origine.

+0

Je ne suis pas sûr que IL est optimisé de manière à augmenter la taille du code avant jit. Il semble que le but des optimisations dans le compilateur C#, par exemple, était la réduction de la taille du code (qui inclut elle-même de nombreuses optimisations telles que l'élimination des variables et autres). Bien que Lippert pourrait développer cela plus complètement et a probablement. – hoodaticus

+1

Je pourrais être déroutant avec le compilateur C++, mais je pense qu'il y avait des commutateurs, [-O1 et -O2] (https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx) qui seraient optimiser pour soit minimiser la taille de l'exécutable ou maximiser la vitesse de l'exécutable. – Icemanind

+0

ce sont certainement des commutateurs C++, très bien :) – hoodaticus