从源代码看.net下exe的加载过程

从源代码看.net下exe的加载过程

ID:37662737

大小:117.35 KB

页数:8页

时间:2019-05-28

从源代码看.net下exe的加载过程_第1页
从源代码看.net下exe的加载过程_第2页
从源代码看.net下exe的加载过程_第3页
从源代码看.net下exe的加载过程_第4页
从源代码看.net下exe的加载过程_第5页
资源描述:

《从源代码看.net下exe的加载过程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这里的源代码自然不是指.netFramework的源码,不过微软公开了一个代号为rotor的opensourcecli的源码,你可以把它看为轻量级的.netframework。最关键的是,它俩的运行机理大致相同。今天,我们就从rotor的源码中看看做为程序调试最基本的exe文件的动态加载。同样,先给出参考文献,免得有人说我抄袭。《insidetherotorcli》,另一本是《sharedsourcecli》,只不过网上搞不到。当然,还要从MSDN的网站下载sscli2.0压缩包。和win32下一样,系统会提供一个loader将exe读入,sscli中提供了另一个loader的例子:c

2、lix.exe。我们暂且把它看为系统默认的loader,来看源码(clix.cpp),注意红色的代码代码:--------------------------------------------------------------------------------DWORDLaunch(WCHAR*pFileName,WCHAR*pCmdLine){WCHARexeFileName[MAX_PATH+1];DWORDdwAttrs;DWORDdwError;DWORDnExitCode;...//这里进行一系列文件的属性检查...if(dwError!=ERROR_SUCCESS){

3、//Wecan'tfindthefile,orthere'ssomeotherproblem.Exitwithanerror.fwprintf(stderr,L"%s:",pFileName);DisplayMessageFromSystem(dwError);return1;//error}nExitCode=_CorExeMain2(NULL,0,pFileName,NULL,pCmdLine);//_CorExeMain2neverreturnswithsuccess_ASSERTE(nExitCode!=0);DisplayMessageFromSystem(::GetLast

4、Error());returnnExitCode;}--------------------------------------------------------------------------------这里我们看到了著名的CorExeMain,还记得用PE编辑文件打开.netPE文件,只引入了一个函数吗?mscoree.dll!_CorExeMain。奇怪,怎么不是_CorExeMain2呢?这只是rotor和商业版的framework的一点区别而已。你可以用IDApro逆一下mscoree.dll,就可以看到_CorExeMain()只不过是一个中转,代码如下代码:----

5、----------------------------------------------------------------------------.text:79011B47pushoffseta_corexemain;"_CorExeMain".text:79011B4Cpush[ebp+hModule];hModule.text:79011B4Fcallds:__imp__GetProcAddress@8;GetProcAddress(x,x).text:79011B55testeax,eax.text:79011B57jzloc_79019B46.text:79011B5D

6、calleax--------------------------------------------------------------------------------进入后马上就调用了mscorwks.dll的_CorExeMain。而这个函数和rotor中刚才提到的_CorExeMain2提供的功能差不多,就开始exe载入的初始化了。这些都可以从反汇编代码与源代码比较看出来。继续回到sscli中,来看_CorExeMain2()的代码(ceemain.cpp)代码:--------------------------------------------------------

7、------------------------__int32STDMETHODCALLTYPE_CorExeMain2(//Executableexitcode.PBYTEpUnmappedPE,//->memorymappedcodeDWORDcUnmappedPE,//Sizeofmemorymappedcode__inLPWSTRpImageNameIn,//->ExecutableName__inLPWSTRpLoadersFileN

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。