我知道DLL包含被编译,链接,以及单独地存储一个或多个导出的函数..

我的问题是关于不是如何创建它。但它是所有关于以何种形式被存储..难道要在0的和1的形式..或在装配命令ADD,MUL, DIV,MOV,CALL,RETURN等。 也什么使得它是处理器依赖..(如86,的x87,IBM 700指令集)..

有人能请解释一下简单一点...!

有帮助吗?

解决方案

在一个计算机中的所有,的一切首先是在 “0&1” 的形式。计算机可以显示其中的一些文字,图片,声音,三维模型等。其实只是一个你如何解释这些问题。但是在那里,在金属,这一切都只是“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的操作。在汇编语言命令的每一个单一的机器指令(再次,在通俗地说)相匹配。

所以你看,竟然没有一个单一的汇编语言。每个CPU架构具有其自己的汇编语言,因为它们每个都具有不同的指令。

请注意,虽然这所有适用于本地.DLL / .EXE文件。 .NET文件是不同的 - 它们不包含机器代码,而是一个抽象的,不存在的CPU指令。这就像Java字节代码。当.NET .DLL / .EXE运行时,.NET运行时从到具体的CPU可以理解的说明抽象的指令进行翻译。他们使用了大量的技巧,使这个速度非常快,所以这些文件运行几乎一样快,简单的.DLL / .EXE文件。

这是否清楚的事情了? :)

其他提示

机DLL(未.NET组件)通常包含只能在一定的平台上运行的机器代码。本机代码是一个字节序列,所述处理器将其视为指令(ADD,MOV,等)。

在Windows中,DLL的被存储在 PE 格式基本上是节的集合它包含有关如何将其映射到内存中的信息。一些区段包含程序的代码(这当然取决于处理器的),其它含有该程序的数据,其它的导出和导入的功能等。

托管代码被编译成由所述运行时,因为它是执行JIT编译一些中间语言。因此,您的DLL将不包含任何依赖于处理器的代码,你就可以与相关的运行时间在任何平台上执行程序。

这取决于你的DLL。通常,一个DLL包含可执行代码作为EXE文件。那些代码DLL是处理器依赖性的,因为在代码只能在特定平台上被执行。的代码使用相同的“格式”作为一个EXE文件(二进制机器代码)被存储。

然而,DLL有时可以只包含数据,随后就被称为“资源DLL”,并且不依赖于处理器的。它们充当用于通过应用程序所使用的数据文件的容器。

请注意,许多DLL是杂交体:它们包含代码和资源。例如,它包括Windows操作系统的用户部分最DLL是混合:可以使用Visual Studio或者资源管理器看它们所包含的资源(数据段)打开它们,或用相关沃克或DUMPBIN打开它们见的功能(该代码段)它们包含。

(当然这个答案真的是Windows特定的,我不知道.so文件这是Linux的相当于DLL的)

两者一个DLL和一个EXE包含可执行代码。

在一个DLL的情况下,它不具备必要的零件被直接执行。它必须从其他一段可执行代码被调用。一个DLL可以调用另一个,但所有最终必须从和EXE调用。

那么什么是与适用的EXE什么处理器兼容的规则也适用于DLL文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top