《Windows Via C/C++》读书笔记之dll隐式链接
2014-04-11 10:02
218 查看
《Windows Via C/C++》读书笔记之dll隐式链接
一、使用方式
exe要隐式链接一个dll,分阶段的需要.h文件,.lib文件和.dll文件。编译阶段:.h文件提供函数定义及变量定义
链接阶段:.lib文件提供导出函数和变量的符号名称
运行阶段:.dll文件提供代码和数据
TIPS: 查看exe所需的dll,可以使用VC带的dumpbin -imports xxx.exe来查看,或者使用Total Commander查看。
二、理解加载过程
loader扫描exe的import section,加载其所需的dll,这是一个递归的过程,loader也会检查dll的import section,递归load所需的dll。这个过程中,loader会对这些dll保持跟踪,一个dll只会被加载一次,即使多个模块都需要这个dll。
loader在将所有需要的dll加载到地址空间后,开始resolve所有imported symbols,将RVA加上dll加载的基址,保存到exe的import section。当这些完成后,exe引用这些imported symbols就只需要查找exe的imported section,然后把地址取出,就可以直接访问这些symbols了。
三、理解.lib文件
动态库的.lib文件不包含函数或者变量,仅仅是列出了导出函数和变量的符号名称。在链接阶段用于符号resolve。
静态库的.lib文件包含了函数和代码,相当于是目标文件,会被编进PE文件。
四、dll搜索顺序
exe加载dll时的搜索顺序:
1、exe文件所在目录
2、windows系统目录,可用GetWindowsDirectory()获取
3、对于16位系统,在windows目录下的System子目录
4、windows目录,可用GetSystemDirectory()获取
5、进程的当前目录,可用GetCurrentDirectory()获取
6、PATH环境变量指定的目录
相关文章推荐
- Windows Via C/C++ 读书笔记 13 动态链接库基础DLL Basics
- 《Windows Via C/C++》读书笔记之dll导出与加载
- 《Windows Via C/C++》读书笔记之dll加载时刻
- 《Windows Via C/C++》读书笔记之dll入口函数
- Windows Via C/C++ 读书笔记 10
- Windows via C/C++ 5th 读书笔记(Ⅱ)
- 如何调用 DLL 中的C++ 类(隐式链接)
- Windows Via C/C++ 读书笔记 9 Windows Memory Architecture
- 如何调用 DLL 中的C++ 类(隐式链接)
- C++对dll链接库的显示(动态)调用和隐式(静态)调用
- C++ 多个类的DLL封装以及隐式链接和显式链接2种方法调用
- Windows Via C/C++ 读书笔记
- Windows via C/C++ —— 进程(一)读书笔记
- C++ 多个类的DLL封装以及隐式链接和显式链接
- Windows Dll动态库隐式链接
- Windows Via C/C++ 读书笔记 6
- Windows Via C/C++ 读书笔记 12 Heap(堆)
- Windows Via C/C++ 读书笔记 11
- Visual C++ DLL的隐式链接示例
- windows via c/c++ 读书笔记