微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows如何区分常规EXE和.NET EXE?

我在面试中被问到Windows操作系统是如何区分常规的EXE和.NET EXE的。

我的回答是,当一个.NET EXE编译时,编译器会在头文件中放入一些信息。 信息是PE32或PE32 +。 Windowsvalidation标题确定是否需要加载加载CLR的MscoreE.dll并执行EXE。

我的答案是否正确?

为什么微软不像C ++那样提供像windows.h这样的最原生的函数和结构的静态Win32类?

如何使用C#设置窗口的高度?

如何以编程方式检测来自Windows 2003服务器的无线networking设备的密码types和encryption级别

无法打开文件stream的阅读,但我仍然能够复制文件

终止在C#中运行消息循环的工作线程

最新单声道在centos上

CoreAudio OnVolumeNotification事件订阅会导致explorer.exe中的cpu使用率过高

通过SetSecurityDescriptor设置WMI ACL

Windows,C#:从活动和保存的日志中读取事件日志条目

令人难以置信的奇怪的文件创build时间问题

虽然我一般同意格雷格(GregC)的观点 ,但有时候这种类型的信息是有用的。 但是,这是一个很难回答的问题,除非是CLR团队:)

网页和博客

便携式可执行文件(维基百科)

图书…

专家的.NET 2.0 IL汇编 (我认为这是一本很好的书)

我认为以下两个链接是理解PE文件结构和Windows加载器的好资源。

深入了解Win32可移植可执行文件格式 (MSDN Mag Feb 2002)

深入了解Win32可移植可执行文件格式,第2部分 (MSDN Mag Mar 2002)

2002年3月的文章,我相信你的问题的确切答案是:

.NET可执行文件的主要用途是将特定于.NET的信息(如元数据和中间语言(IL))存储到内存中。 此外, 一个.NET可执行文件链接到MscoreE.DLL 。 这个DLL是.NET进程的起点。 当.NET可执行文件加载时,其入口点通常是一小段代码 该存根仅跳转到MscoreE.DLL中的导出函数(_CorExeMain或_CorDllMain) 。 从那里,MscoreE负责,并开始使用可执行文件中的元数据和IL。 此设置与Visual Basic(.NET之前)中的应用程序使用MSVBVM60.DLL的方式类似。

简而言之,它已经有一段时间了,所以这可能有点过时了。

对于XP和更高版本,操作系统加载器被增强,以检测基于PE目录条目的托管程序集,如果目录条目存在,加载程序自动加载mscoree.dll,并跳转到mscoree中的函数_CorExeMain(2)对于可执行文件和_CorDllMain对于DLL。 然后,_CorExeMain负责加载CLR并启动托管代码的执行。

我用下面的方式提醒我自己的入口点名称

C:WindowsSystem32>dumpbin -exports mscoree.dll Microsoft (R) COFF/PE Dumper Version 9.00.30729.01 copyright (C) Microsoft Corporation. All rights reserved. Dump of file mscoree.dll File Type: DLL Section contains the following exports for mscoree.dll 00000000 characteristics 4AF3AF84 time date stamp Fri Nov 06 07:09:24 2009 0.00 version 17 ordinal base 126 number of functions 123 number of names ordinal hint RVA name 38 0 0001AAA0 CLRCreateInstance ... Lots of stuff left out... 136 76 00015030 _CorDllMain 138 77 00004DDB _CorExeMain 137 78 0001A981 _CorExeMain2 139 79 0002033B _CorImageUnloading 140 7A 000042D0 _CorValidateImage 24 00008017 [NONAME] 142 00014C4D [NONAME] Summary 4000 .data 4000 .reloc 1000 .rsrc 40000 .text

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐