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

Windows如何区分常规EXE和.NET EXE?,第1张

概述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

总结

以上是内存溢出为你收集整理的Windows如何区分常规EXE和.NET EXE?全部内容,希望文章能够帮你解决Windows如何区分常规EXE和.NET EXE?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存