Windows Hook之动态链接库

本文介绍了如何使用Visual Studio 2013创建动态链接库(DLL),包括通过DllMain()函数实现DLL的加载与卸载,以及如何导出DLL中的函数供其他程序调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态链接库(DLL),能够被程序加载的程序。

创建动态链接库:

    工具:VS2013

一:DLL创建与调用:DllMain()函数

第一步:新建项目->win32,项目名:"CreateDllDemo",解决方案名:DllDemo,然后选择DLL,完成。如图:

对上面的dllmain.cpp文件相应位置添加如下代码,用作等会的测试:

        

第二步:点击解决方案,右键添加新建项目,选择win32控制台应用程序,项目名:LoadDllDemo,然后确定、完成。

        

第三步:项目LoadDllDemo当做一个程序,用来加载Dll(项目CreateDllDemo)。需要用到windows的API,添加代码如下:

        

第四步:将两个项目都右键生成。则在解决方案的目录下,就出现了如下文件:

        

第五步:运行项目LoadDllDemo,或者直接双击上图的LoadDllDemo应用程序,就出现了以下结果:

        

点击确定后,从加载变成卸载,对应CreateDllDemo中的代码,如图:

        

    当然了,这个实在项目建立后不做任何改变。如果在目录下没有CreateDllDemo.dll,就不会出现这个结果。

 

程序查找dll顺序:先找当前文件夹,如果当前文件夹没有dll,那么就会去System32中查找。如果是64位操作系统,就是去SysWOW64寻找dll。

Dll劫持:当程序加载一个系统内部的dll文件(以user32.dll为例),如果在程序所在的目录(本地文件夹)中存在user32.dll(相比系统内部,这个是假的。),那么,程序就会加载这个假的dll。这就是dll劫持。

 

二:导出函数就是在dll中写的函数,在其他程序里使用。比如CreateProgress()函数,位于Kernel32.dll中。

    在上述的解决方案中,新建一个与CreateDllDemo相同的项目,项目名:DllExportDemo。不同的是在选择Dll选项时,还要勾选导出符号。如图;

        

    本地文件夹Debug中,多出来了两个文件:

        

    使用ExportDllDemo中的函数int fnDllExportDemo(void),在项目LoadDllDemo中做如下修改,其他不变:

        将函数int fnDllExportDemo(void)做成一个函数指针:

            

 

如果直接运行,会失败:

        失败原因,当前使用的是C++编译出来的,命名粉碎机制。应该改成C,如下:

            

        然后再将它重新生成。

    注:我在LoadDllDemo输出后面添加了一行代码,system("pause"),不然命令提示行闪现就消失了。结果如下:

        

    这样,导出函数就成功了。

    恩,暂时就这样,拜拜。

    忘了说了,这是我看视频的学习记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值