【问题标题】:Difference between .exe and .pe files?.exe 和 .pe 文件之间的区别?
【发布时间】:2015-11-17 12:56:07
【问题描述】:
在编译 Visual Studio C# 应用程序时会生成 PE 和 EXE 文件。
那么PE和EXE文件的主要区别是什么?
据我所知,PE文件包含
PE/COFF Headers,
CLR Headers,
CLR Data,
Meta Data,
IL code,
.data,.text...
比exe包含什么?PE与EXE有何不同?
【问题讨论】:
标签:
c#
visual-studio
compilation
exe
portable-executable
【解决方案1】:
可移植可执行文件 (PE) 是包含操作系统正确加载可执行代码 (.exe, .dll, ...)
这可能包括linking、资源管理、TLS 数据等的动态库引用。
然而,
可执行文件 (.exe) 是表示计算机程序主要执行点的文件,也就是说,用 C# 术语来说,文件包含 Main 函数或入口点。
【解决方案2】:
.exe 文件是 PE 文件的子集,而 PE 文件包括 .exe、.dll 和 .ocx 文件。
【解决方案3】:
所以,PE代表 Portable Executable,它是 Windows 32 位和 64 位环境中可执行二进制文件的格式文件。
据我了解,生成的PEfile 中的信息包括:
但是,IL 代码将位于 EXE 文件中,因为它应该是独立于平台的,并且在您运行应用程序时会被编译为本机代码 (Just-in time-compiler)。 PEsection 还负责 CLR 的初始化。
请记住,PE 部分可以在可执行文件中,这在大多数应用程序中更有意义。