[转].NET编译的EXE文件,与一般的EXE文件有什么不同
2009-03-25 14:46
381 查看
转自CSDN,只是把其中比较关键的总结性回答列举一下。
备忘。
.net编译后的exe文件称为.net PE格式,有别于windows 一般PE文件:
(1)文件格式上,.net PE文件多增加了专有的.net首部
(2).net PE文件为中间语言代码,可以反编译查看,需要本地化
(3)windows装载程序执行.exe时,如果发现.net首部,则将此文件转交clr执行,否则仍由OS管理。
15 楼[b]chagel(Mike in Shanghai)回复于 2003-11-10 23:26:12 得分 0 [/b]
.net 源程序代码经过Compiler编译后,产生托管模块,包含:
1.PE header
2.CLR header
3.Metadata
4.IL
对Windows DNA不是很熟,vs产生的exe应该含有PE header,及Native Code二进制代码.
显然Metadata描述了类型信息,CLR header供双击此模块JIT再次编译调用CLR时需要.IL是中间代码需要再次编译成CPU认识的机器代码.
关于托管和非托管代码,NGEN,JIT等见MSDN文摘:
[编写更快的托管代码:了解开销情况]
http://www.microsoft.com/china/msdn/library/dndotnet/html/fastmanagedcode.asp
另外.net程序装没有安装.net framework的机子上,通过预先将IL转换成机器码应该实现,这方面也已经有了第三方的软件. 另一种方法源自java,还记得把java中调用的类库,jvm.dll等打包部署到没有jre的客户端,理论是.net也应该可以实现,jre针对clr,Java类库针对FCL,通过对mscorlib.dll和核心类库的打包也应该可以实现吧,不过.Net Framework的类库管理机制及CLR运行机制远比Java复杂了。
备忘。
.net编译后的exe文件称为.net PE格式,有别于windows 一般PE文件:
(1)文件格式上,.net PE文件多增加了专有的.net首部
(2).net PE文件为中间语言代码,可以反编译查看,需要本地化
(3)windows装载程序执行.exe时,如果发现.net首部,则将此文件转交clr执行,否则仍由OS管理。
15 楼[b]chagel(Mike in Shanghai)回复于 2003-11-10 23:26:12 得分 0 [/b]
.net 源程序代码经过Compiler编译后,产生托管模块,包含:
1.PE header
2.CLR header
3.Metadata
4.IL
对Windows DNA不是很熟,vs产生的exe应该含有PE header,及Native Code二进制代码.
显然Metadata描述了类型信息,CLR header供双击此模块JIT再次编译调用CLR时需要.IL是中间代码需要再次编译成CPU认识的机器代码.
关于托管和非托管代码,NGEN,JIT等见MSDN文摘:
[编写更快的托管代码:了解开销情况]
http://www.microsoft.com/china/msdn/library/dndotnet/html/fastmanagedcode.asp
另外.net程序装没有安装.net framework的机子上,通过预先将IL转换成机器码应该实现,这方面也已经有了第三方的软件. 另一种方法源自java,还记得把java中调用的类库,jvm.dll等打包部署到没有jre的客户端,理论是.net也应该可以实现,jre针对clr,Java类库针对FCL,通过对mscorlib.dll和核心类库的打包也应该可以实现吧,不过.Net Framework的类库管理机制及CLR运行机制远比Java复杂了。
相关文章推荐
- VS2008 编译后在不同机器上运行 exe文件的问题
- 什么是Windows Service, 它和标准的"exe"文件有什么不同?
- C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件
- C#.NET如何将cs文件编译成dll文件 exe文件 如何调用dll文件
- 使用ASP.NET 编译工具 (Aspnet_compiler.exe)隐藏页面文件
- 同一段C++在Linux和windows下编译后的可执行文件有什么不同?
- C#.NET 中visual studio生成的.pdb/ .vshost.exe/ .vshost.exe.manifest文件是什么
- 理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么
- 文件更新后, 编译也成功,但无法调试,exe运行后还是原来的版本not found or not built by the last incremental link; performing full link
- ADO.NET Entity Framework 如何:使用 EdmGen.exe 生成模型和映射文件
- C#(asp.net )读取ASHX文件(一般处理程序)
- Java中class文件编译成exe文件的几种方法【推荐】
- 错误总结:C/C++运行时提示".exe已停止工作"? 调试时出现Program received signal SIGSEGV,Segmentation fault?引用无效内存一般是什么错误?
- .CS文件编译生成.DLL文件 .EXE文件
- 将js文件编译成dll在Asp.Net中调用
- 使用Visual Studio .NET 2010的配置和条件编译在一个项目实现不同版本
- 如何将M文件编译成独立运行的exe文件
- 如何把 java 程序编译成 .exe 文件
- visual studio 在编译时 出错显示 无法打开文件 debug// exe
- 如何用CSC.exe来编译Visual C#的代码文件