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?
Répondre
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.
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
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
ce sont certainement des commutateurs C++, très bien :) – hoodaticus
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
@cdhowie, pour une classe vide avec vide La différence de fonction principale est 2kb. –
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. –