Kernel32.dll - 管理内存,进程以及线程
User32.dll - 执行用户界面相关操作(create dialog, send message)
GDI32.dll - 绘制图像和显示文字
为什么要用DLL?
1. 需要时载入
2. 不同团队开发不同module
3. 两个EXE使用同一个DLL,该DLL载入内存一次。共享该DLL在内存中的页面
4. 共享资源(Dialog, strings, Icon, BMP)
5. 本地化
6. 跨平台
DLL文件映射到调用进程的地址空间
-
隐式 (Implicit load-time linking)
-
显式 (Explicit run-time linking)
20.6 DLL 重定向
共享的DLL先放在windows系统目录中,方便定位和共享。但是时间久了,后来安装的比较老的文件可能覆盖这个目录中的DLL
中定向特性:强制加载程序从EXE目录中载入DLL。
必须有一个AppName.local文件或文件夹在EXE目录中。
Vista以后的OS默认关闭重定向。因为会从EXE文件夹中load伪造的系统DLL
20.7 DLL基地址重定位
?