Windows核心编程:DLL高级技术

本文详细介绍了Windows下DLL的高级技术,包括如何显式加载和卸载DLL,如何链接到导出符号,DLL的入口点函数DllMain的作用,以及涉及到的延迟加载、函数转发器、已知DLL、DLL重定向和模块基地址重定位等概念。
摘要由CSDN通过智能技术生成

 

作者:shenzi

链接:http://blog.csdn.net/shenzi

Windows核心编程:DLL高级技术
1.DLL模块的显示载入和符号链接

    图1显示了应用程序如何显示地载入一个DLL并与DLL的符号进行链接:


图1:DLL创建过程以及应用程序显式链接到DLL的过程
构建DLL
1)头文件,其中包含待导出函数的原型、结构和符号的声明
2)C/C++源文件,其中包含待导出函数的实现和变量
3)编译器为每个C/C++源文件生成.obj文件
4)连接器将每个.obj模块合并,从而生成DLL
5)如果至少导出了一个函数/变量,那么链接器会同时生成.lib文件
注意:在显示链接的时候,没有用到这个.lib文件

构建EXE

6)头文件,其中包含待导出函数的原型、结构和符号的声明
7)C/C++源文件,其中包含待导出函数的实现和变量
8)编译器为每个C/C++源文件生成.obj文件
9)链接器将每个.obj模块合并,从而生成.exe
注意:由于没有直接引用该DLL导出的符号,因此这里不需要它的.lib文件。生成的.exe文件中不包含导入表

显示地载入DLL模块
    在任何时候,进程中的一个线程可以调用下面两个函数来将一个DLL映射到进程的地址空间中:
    
HMODULE LoadLibrary(PCTSTR pszDLLPathName);
    
HMODULE LoadLibraryEx(
        PCTSTR pszDLLPathName,
        HANDLE hFile,
        DWORD dwFlags);

     这两个函数会在用户的系统中对DLL的文件映像进行定位,并试图将该文件映像映射到调用进程的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值