DLL是什么形式?是什么使它依赖于处理器

DLL是什么形式?是什么使它依赖于处理器,dll,operating-system,processor,Dll,Operating System,Processor,我知道DLL包含一个或多个单独编译、链接和存储的导出函数 我的问题不是关于如何创造它。。但这都是关于它是以什么形式存储的。。它将以0和1的形式出现。。或者在汇编命令中添加、MUL、DIV、MOV、CALL、RETURN等。。 也是什么使它依赖于处理器。。与x86、x87、IBM 700指令集类似 有人能简单地解释一下吗 本机DLL而不是.NET程序集通常包含只能在特定平台上运行的机器代码。机器代码是一个字节序列,处理器将其视为ADD、MOV等指令。DLL和EXE都包含可执行代码 对于DLL,它没

我知道DLL包含一个或多个单独编译、链接和存储的导出函数

我的问题不是关于如何创造它。。但这都是关于它是以什么形式存储的。。它将以0和1的形式出现。。或者在汇编命令中添加、MUL、DIV、MOV、CALL、RETURN等。。 也是什么使它依赖于处理器。。与x86、x87、IBM 700指令集类似


有人能简单地解释一下吗

本机DLL而不是.NET程序集通常包含只能在特定平台上运行的机器代码。机器代码是一个字节序列,处理器将其视为ADD、MOV等指令。

DLL和EXE都包含可执行代码

对于DLL,它没有直接可执行的必要部分。它必须从另一段可执行代码调用。一个DLL可以调用另一个DLL,但最终必须从和EXE调用所有DLL


因此,适用于EXE的处理器与什么兼容的规则也适用于DLL。

这取决于您的DLL。通常,DLL包含作为EXE文件的可执行代码。这些代码DLL依赖于处理器,因为代码只能在特定平台上执行。该代码使用与EXE文件二进制机器代码相同的格式存储

然而,DLL有时只能包含数据:它们被称为资源DLL,完全不依赖于处理器。它们充当应用程序使用的数据文件的容器

请注意,许多DLL是混合的:它们同时包含代码和资源。例如,构成Windows操作系统用户部分的大多数DLL都是混合的:您可以使用Visual Studio或资源管理器打开它们以查看它们包含的资源和数据段,或者使用Dependency Walker或dumpbin打开它们以查看它们包含的函数和代码段


当然,这个答案确实是针对Windows的,我不知道是什么。因此,linux中的文件相当于Windows中的DLL,DLL的存储格式基本上是一个包含如何将其映射到内存的信息的节集合。某些部分包含程序的代码,这些代码当然依赖于处理器,其他部分包含程序的数据,其他部分包含导出和导入的函数,等等

托管代码被编译成某种中间语言,在执行时由运行时进行JIT处理。因此,您的dll将不包含任何依赖于处理器的代码,并且您将能够在任何具有相关运行时的平台上执行程序。

首先,计算机中的所有内容都是0和1的形式。事实上,计算机可以将其中一些显示为文本、图片、声音、3D模型等,这只是你如何解释它们的问题。但在那里,在金属上,它只是0和1,也被称为比特。请注意,它们总是以8为一组分组在一起,这些被称为字节。这确实是为了提高效率,因为单独操作每一个位都太单调乏味了。事实上,今天的计算机甚至不再使用单个字节,或者更确切地说,它们很少使用单个字节。大多数情况下,一次使用4或8个字节进行操作,这取决于外行所说的32位或64位CPU,实际上要复杂一些

至于.DLL文件,就像.EXE文件一样,它包含描述CPU可以执行的指令的字节。CPU直接从.DLL/.EXE中获取这些字节,并执行它们,无需任何进一步修改。这就是为什么这些文件是特定于CPU的。在不同的CPU架构中,相同的字节组合意味着不同的事情,因此.DLL/.EXE只能在为其设计的CPU上正确运行。在其他CPU上,这些字节将意味着一些其他指令,当运行时,程序很可能会做一些毫无意义的事情,并立即崩溃

您提到的汇编命令也应该得到解释。汇编语言不是CPU可以理解的语言。这是一种人类可以理解的语言。创建它是因为直接用机器代码编写CPU实际理解的字节非常困难。你在屏幕上看到的完全是胡言乱语,试着在记事本中打开一些.EXE文件!但每一点都必须精确设置,才能发挥作用

所以汇编语言基本上是一样的,只是这些指令是用人类可以阅读的文本编写的。对于CPU可以理解的每一个机器代码,都有一条具有人性化名称的指令。汇编编译器只需读取这些指令,并将它们替换为表示CPU要执行的实际指令的字节。这是一个1:1的手术。用外行的话来说,汇编语言中的每个命令都会再次匹配一条机器指令

你看,甚至没有一种汇编语言。每个CP U架构有自己的汇编语言,因为它们都有不同的指令

请注意,所有这些都适用于本机.DLL/.EXE文件。NET文件则不同——它们不包含机器代码,而是针对抽象的、不存在的CPU的指令。这就像Java字节码。当运行.NET.DLL/.EXE时,.NET运行时将其从抽象指令转换为特定CPU可以理解的指令。他们使用了很多技巧来提高速度,因此这些文件的运行速度几乎与简单的.DLL/.EXE文件一样快


这能把事情弄清楚吗

NET程序集只是中间语言的一个示例。其他示例包括Java字节码和各种p代码格式。