汇编语言链接库简介
如果编程者花时间的话,就可以用汇编语言编写岀详细的输入输岀代码。就好比自己从头开始搭建汽车,然后可以驾车出行一样。这个工作很有趣但也很耗时。接下来我们来了解一下什么是链接库。
假设一个程序调用过程 WriteString 在控制台窗口显示一个字符串。该程序源代码必须包含 PROTO 伪指令来标识 WriteString 过程:
如果被调用过程不在链接库中,链接器就发出错误信息,且不会生成可执行文件。
下图展示了为什么 kernel32.lib 是通向 kernel32.dll 的桥梁。
背景知识
链接库是一种文件,包含了已经汇编为机器代码的过程(子程序)。链接库开始时是一个或多个源文件,这些文件再被汇编为目标文件。目标文件插入到一个特殊格式文件,该文件由链接器工具识别。假设一个程序调用过程 WriteString 在控制台窗口显示一个字符串。该程序源代码必须包含 PROTO 伪指令来标识 WriteString 过程:
WriteString proto
之后,CALL 指令执行 WriteString:call WriteString
当程序进行汇编时,汇编器将不指定 CALL 指令的目标地址,它知道这个地址将由链接器指定。链接器在链接库中寻找 WriteString,并把库中适当的机器指令复制到程序的可执行文件中。同时,它把 WriteString 的地址插入到 CALL 指令。如果被调用过程不在链接库中,链接器就发出错误信息,且不会生成可执行文件。
链接命令选项
链接器工具把一个程序的目标文件与一个或多个目标文件以及链接库组合在一起。比如,下述命令就将 hello.obj 与 irvine32.lib 和 kernel32.lib 库链接起来:link hello.obj irvine32.lib kernel32.lib
32位程序链接
kernel32.lib 文件是 Microsoft Windows 平台软件开发工具(Software Development Kit)的一部分,它包含了 kernel32.dll 文件中系统函数的链接信息。kernel32.dll 文件是 MS-Windows 的一个基本组成部分,被称为动态链接库(dynamic link library)。它含有的可执行函数实现基于字符的输入输出。下图展示了为什么 kernel32.lib 是通向 kernel32.dll 的桥梁。