赞
踩
什么是模块,就是动态链接库,俗称DLL
与之对应的是静态链接库,俗称lib
打开火绒剑,查看每一个线程都是一个dll
即程序都依赖于dll运行,主要是win的api函数让你必须使用动态链接库。
先生成多个obj文件,然后用工具将很多个obj文件合成一个lib文件。
将函数直接定义在obj文件内,程序使用直接导入lib文件,
在程序内,直接使用函数名即可,程序会自动去lib文件内去寻找,
lib的缺点:
某lib文件A内有一个打印功能的函数,(打印功能函数大小5kB)
程序a需要用,要将打印功能的函数包含进来(程序a有100Kb)
程序b也用到,。。。。。。。。。。。。
。。。。。。。。。
。。。。
一万个程序都需用到“打印功能函数”,都需要将“打印功能函数”包含进来,
会造成大量磁盘空间的浪费;
另外假设“打印函数”更新了,所有已经编译的程序都需要重新编译,
基于以上缺点,产生了动态链接库,即dll
这个就类似函数的作用,
程序仅仅保存dll的位置,不会将具体的代码存放进去,
仅仅会在程序运行的时候,才会将具体的代码加载进去,
多个程序都使用同一个dll的时候,会通过“分页机制”去加载这个对应的DLL文件。
但是在物理内存之后,仅仅保存了一份。
程序使用DLL,需要描述清楚,使用的库的名称和函数的名称。
另外动态链接库的名称不仅仅会是dll,还能是exe\fon(字体文件)\sys(驱动文件)\drv(驱动文件)\ocx(控件)等.
就是系统之中包含的共用代码模块都有可能是动态链接库。
新建一个空项目(建议),
先右击新建的项目做一些设置,然后在新建一个.c文件,
设置为启动项,
导出一个dll接口,
这个dll是无法直接像exe直接执行,使用DLL文件进行注入qq。
在注入之前可以使用火绒剑看看qq已经加载的dll文件是没有“naizigege.dll”的,
下边使用工具进行注入,(其实这个工具并不是太好用)
主要是年份比较久了,很多进程无法获取到。
动态链接库选择刚刚生成的dll文件,加载执行的函数就是dll内,我们定义的naizigege,
等待缓缓加载冲一会边弹出了窗,
注入之后,该dll会被当做qq进程的一部分,被调用。
使用火绒剑,可以直接看到,已经成功注入
这里也说明,在使用火绒剑的时候,看到这种“三五”产品大概率也是不正常的,
值得一提的是,这个工具还可以将已经注入的dll给卸载掉,
先修改属性,
在头文件,右击,创建新的头文件(naizi.h)
在新建函数体,具体内容如下,
生成lib,
生成的lib文件在项目文件夹下“debug文件夹内”
将lib文件先改名字为一个好记得,比如下图,
如何加载使用lib呢?
将生成的lib与头文件都放到一个新建test文件夹下面,
新建一个项目;右击头文件,添加“现有项”,将复制过来的naizi.h加进入,
创建“源文件”demo.c,具体内容如下。
此时虽然没有直接报错,但是直接运行的话就弹出了错误。
这是因为仅仅导入了h头文件,还没有导入lib文件。先选择lib文件的位置。
此时还行需要在这里加一下“madou.lib;”这样lib文件就导入完成。
然后,直接运行会弹出10,
其他建议:
使用自己的lib文件夹,建议将自己的lib头文件引入(上图之中没有导入),
即在上图的第2行导入以下内容;导入自己写的lib文件,不用尖括号而使用双引号。
#include "naizi.h"
lib的特别使用场景:
不想给别人看到函数实现的代码,就给对方一个生成好的lib文件,
一个头文件(注释写好使用方法)
遇到错误:
一个项目最终还是没有输出,这个主要是我们之前配置了项目隐藏程序的黑窗口,导致没有显示。
新建一个项目同样的流程解决,
goto一般可以理解为跳转;
先整一个“死循环”模拟while循环,
这个是运行2S的效果截图;值得一提的是,上图的“s”变量名称是自定义的(任意)。
也可以指定次数,模拟for循环
这个goto与递归挺像的,自己调用自己。
坑点:
下边的go函数体正常要放到main函数的上边,不然可能会找不到。
或者使用上图的方法,在前边先声明go函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。