dotnet学习笔记二 - 运行.net程序的秘密,dotnet学习,otnet学习笔,tnet学习笔记,net学习笔记二,et学习笔记二-,t学习笔记二-运,学习笔记二-运行,习笔记二-运行.,笔记二-运行.n,记二-运行.ne,二-运行.net,-运行.net程,运行.net程序,行.net程序的,.net程序的秘

本站地址:http://www.bajiao123.com

dotnet学习笔记二 - 运行.net程序的秘密
DWORD cUnmappedPE, // Size of memory mapped codeLPWSTR pImageNameIn, // -> Executable Name
LPWSTR pLoadersFileName, // -> Loaders Name
LPWSTR pCmdLine
一目了然,pUnmappedPE和cUnmappedPE就是.net编译后的中间代码的内存缓冲和长度。pImageNameIn就是这个EXE的名字,pLoadersFileName是载入者的名字,pCmdLine就是命令参数。有了这几个参数我们就可以猜到.net将中间代码编译后放入到PE文件中,再加入一段代码直接执行MSCOREE.DLL的_CorExeMain,参数就是中间代码的内存指针。JIT就把这段中间代码编译成机器代码执行。
_CorExeMain2代码不长,简单总结一些,做了如下的5步工作:
1. 验证签名。
2. 初始化CLR环境
3. 创建了一个代表EXE文件的PEFile对象
4. 使用SystemDomain的静态方法执行这个PEFile。
5. 执行后,做一些清除工作,退出。
很明显,上面5个步骤里最重要,最关键的就是第4步了,究竟做了什么呢?有兴趣的朋友可以去看微软的CLI代码,我在以后的文章中也会进一步分析。
本站地址:http://www.bajiao123.com

