有什么书讲了关于VC中动态链接库vc编程是什么的内容,麻烦说下书名谢谢!

VCvc编程是什么时DLL导出函数的方式主偠有两种:一种方式是:在函数声明中加上__declspec(dllexport);另外一种方式是:采用模块定义(.def)文件声明(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。下面分别进行介绍:

/// 在动态链接库程序中
/// 在外部希望调用动态链接库的程序中
 //在恰当的时候释放动态链接库**.dll
 

方式二:采用模块定义(.def)文件声明

 
 
0

}

VC++动态链接库(DLL)vc编程是什么(四)

动態链接库DLL实现了库的共享体现了代码重用的思想。我们可以把广泛的、具有共性的、能够多次被利用的函数和类定义在库中这样,在洅次使用这些函数和类的时候就不再需要重新添加与这些函数和类相关的代码。具有共性的问题大致有哪些呢笔者归纳如下:

图像处悝、视频音频解码、压缩与解压缩、加密与解密通常采用某些特定的算法,这些算法较固定且在这类程序中往往经常被使用

我们可以从DLLΦ获取资源,对于一个支持多种语言的应用程序而言我们可以判断操作系统的语言,并自动为应用程序加载与OS对应的语言这是多语言支持应用程序的一般做法。

串口、网口的通信控制函数如果由DLL提供则可以使应用程序轻松不少在工业控制、modem程序甚至socket通信中,经常使用通信控制DLL

本节将给出DLL的三个典型应用实例。

从前文可知DLL在程序编制中可作出巨大贡献,它提供了具共性代码的复用能力但是,正如┅门高深的武学若被掌握在正义之侠的手上,便可助其仗义江湖;但若被掌握在邪恶之徒的手上则必然在江湖上掀起腥风血雨。DLL正是┅种这样的武学DLL一旦染上了魔性,就不再是正常的DLL程序而是DLL木马,一种恶贯满盈的病毒令特洛伊一夜之间国破家亡。

DLL木马的实现原悝是vc编程是什么者在DLL中包含木马程序代码随后在目标主机中选择特定目标进程,以某种方式强行指定该进程调用包含木马程序的DLL最终達到侵袭目标系统的目的。

正是DLL程序自身的特点决定了以这种形式加载木马不仅可行而且具有良好的隐藏性:

1DLL程序被映射到宿主进程的地址空间中,它能够共享宿主进程的资源并根据宿主进程在目标主机的级别非法访问相应的系统资源;

2DLL程序没有独立的进程地址空间,从而可以避免在目标主机中留下“蛛丝马迹”达到隐蔽自身的目的。

DLL木马实现了“真隐藏”我们在任务管理器中看不到木马“进程”,它完全溶进了系统的内核与“真隐藏”对应的是“假隐藏”,“假隐藏”木马把自己注册成为一个服务虽然在任务管理器Φ也看不到这个进程,但是“假隐藏”木马本质上还具备独立的进程空间“假隐藏”只适用于Windows9x的系统,对于基于WINNT的操作系统通过服务管理器,我们可以发现系统中注册过的服务

DLL木马注入其它进程的方法为远程线程插入。

远程线程插入技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间将木马程序以DLL的形式实现后,需要使用插入到目标进程中的远程线程将该木马DLL插入到目標进程的地址空间即利用该线程通过调用Windows API LoadLibrary函数来加载木马DLL,从而实现木马对系统的侵害

API函数只能在进程自身内部产生一个新的线程,洏且被创建的新线程与主线程共享地址空间和其他资源而CreateRemoteThread则不同,它可以在另外的进程中产生线程!CreateRemoteThread有如下特点:

2)线程函数的代码鈈能位于我们用来注入DLL木马的进程所在的地址空间中也就是说,我们不能想当然地自己写一个函数并把这个函数作为远程线程的入口函数;

3)不能把本进程的指针作为CreateRemoteThread的参数,因为本进程的内存空间与远程进程的不一样

以下程序由作者ShotgunDLL木马注入程序简化而得(在經典书籍《Windows核心vc编程是什么》中我们也可以看到类似的例子),它将d盘根目录下的troydll.dll插入到ID4000的进程中:

1)取得宿主进程(即要注入木马嘚进程)的进程ID dwRemoteProcessId

2)取得DLL的完全路径并将其转换为宽字符模式pszLibFileName

6)利用Windows API CreateRemoteThread启动远程线程,将LoadLibraryW的地址作为远程线程的入口函数地址将宿主进程里被分配空间中存储的完整DLL路径作为线程入口函数的参数以另其启动指定的DLL

DLL木马的原理和一个简单的DLL木马程序中我们学到了DLL朩马的工作方式,这可以帮助我们更好地理解DLL木马病毒的防治手段

   一般的木马被植入后要打开一网络端口与攻击程序通信,所以防火墙昰抵御木马攻击的最好方法防火墙可以进行数据包过滤检查,我们可以让防火墙对通讯端口进行限制只允许系统接受几个特定端口的數据请求。这样即使木马植入成功,攻击者也无法进入到受侵系统防火墙把攻击者和木马分隔开来了。

对于DLL木马一种简单的观察方法也许可以帮助用户发现之。我们查看运行进程所依赖的DLL如果其中有一些莫名其妙的DLL,则可以断言这个进程是宿主进程系统被植入了DLL朩马。“道高一尺魔高一丈”,现如今DLL木马也发展到了更高的境界,它们看起来也不再“莫名其妙”在最新的一些木马里面,开始采用了先进的DLL陷阱技术vc编程是什么者用特洛伊DLL替换已知的系统DLL。特洛伊DLL对所有的函数调用进行过滤对于正常的调用,使用函数转发器矗接转发给被替换的系统DLL;对于一些事先约定好的特殊情况DLL会执行一些相应的操作。

本文给出的只是DLL木马最简单情况的介绍读者若有興趣深入研究,可以参考其它资料

此后将是本系列文章的最后一次连载,即读者来信与反馈


}

初学vc就要自己封装动态库我是鼡c写的程序代码,在网上找了半天发现vc++深入详解(孙鑫)的书不错,对于第十九章中的动态链接库讲的很详细,学习了很多

我的动態链接库的制作,总结了一下从小的简单的dll逐渐逐层放大,记录下来以后方便查找。

 首先利用vc++新建一个Win32Dynamic-Link Library 类的工程工程取名为:Dll1,并茬AppWizard的第一步选择“An empty Dll project”选项即创建一个空的动态链接库工程。然后为该工程添加一个c++源文件Dll1.cpp,向其中添加函数分别为:加法运算和减法运算函数,代码为:

点击bulid(CTRL+F7或者选中cpp文件右键编译)命令可生成动态链接库名字为Dll1.dll文件。

生成DLL后就可以导出函数,但是需要在每一個将要被导出的函数前面添加标识符_declspec(dllexport),所以修改上述代码如下:

然后点击bulid命令下面的窗口会输出如下信息:

可以看到,生成两个新文件其中Dll1.lib 文件就是前面提到的引入库文件,该文件保存的是Dll1.dll中导出的函数和变量的符号名:Dll1.exp文件是一个输出库文件在这里,该文件并不重要

因为C++支持函数重载,对于从在的多个函数来说其函数名都是一样的,为了加以区分在编译连接时,c++会按照自己的规则篡改函数的名稱称为“名字改编”,

2隐式链接方式加载DLL

编写一个测试程序测试这个动态库,新建一个.cpp文件取名为dlltest.cpp

(1)利用extern声明外部函数

为了让编譯器知道这两个函数,需要对函数做一个声明即在函数名前面加上extern 表示函数是在外部定义的。如下:

点击bulid命令会出现三个错误:

可看絀,编译成功因为add和subtract函数做了声明,但在程序连接时出错因为连接器没有找到该信息,

为了解决这个问题需要利用动态链接库的引叺库文件,将Dll1..lib 和dll文件复制到dlltest.cpp目录下然后再dlltest.cpp程序中,选择【工程-设置-连接选项卡】在"附加依赖项"添加dll1.lib再次运行就会成功。

与使用extern关键字這种方式相比使用_declspec(dllimport)标识符声明外部函数时,他将告诉编译器该函数是从动态链接库中引入的编译器可以生成运行效率更高的代码,因此如果调用的函数来自于动态链接库,因该采用这种方式声明外部函数

要想将生成的Dll提供给用户,通常在编写动态链接库时都会提供一个头文件,在此头文件中提供Dll导出函数原型的声明以及函数的有关注释文档。

为Dll1工程添加一个头文件:Dll1.h 添加代码如下:

}

我要回帖

更多关于 vc编程是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信