典型的Windows和.net二进制文件之间的差异
本文关键字:之间 二进制文件 Windows net 典型的 | 更新日期: 2023-09-27 18:02:43
典型的Windows (WIn32)有什么区别?COM吗?不知道它们叫什么。)dll和使用。net编译的dll ?
我知道它们是不同的,但我不知道它们内部的详细工作原理。
我想知道确切的区别是什么。
编辑:试着在这里添加更多我的疑问:
为什么我不能添加对Win32 DLL的引用,就像我要添加对。net DLL的引用一样?另外,为什么我们必须使用PInvoke?我们是如何为。net dll提供反射和智能感知功能,而不是为Win32 dll提供类似功能的?
你的问题太宽泛了,我无法完全回答,所以我只关注你的第一个疑问。
. net二进制文件是一个典型的Windows二进制文件。
. net PE和其他PE一样。它有一个MZ头、一个DOS段、一个PE头、一个节表和几个节:.text
、.reloc
、.rsrc
。到目前为止,一切正常。一个"典型的"Windows二进制文件包含所有这些东西,只有部分不同,取决于编译器和语言。
.text
表包含一个导入表,该表导入一个单独的DLL mscoree.dll
和一个单独的函数_CorExeMain
。它还包含. net部分:关于程序如何工作的数据(类,方法等),元数据和IL。
那么当你启动。net二进制文件时会发生什么呢?没什么特别的。它就像一个"典型的"Windows二进制文件一样工作。它调用mscoree.dll
来创建一个。net运行时,它将加载可执行文件的。net部分。运行时知道如何执行IL