逆向基础学习 动态链接库基础

DLL

DLL是Dynamic Link Library的缩写,意为动态链接库。

在windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。一般来说,DLL是一种磁盘文件,以.dll、.DRV、.FON、.SYS和许多以.EXE为扩展名的系统文件都可以是DLL(动态链接库)。

比如:Windows系统就是由许多的动态链接库(DLL文件)构成,因为Windows系统本身就是一个应用程序。

逆向基础学习 动态链接库基础_第1张图片

当我们执行某一个程序时,相应的DLL文件就会被调用,一个应用程序可以有多个DLL文件,一个DLL文件中也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。比如USER32.dll、ntdll.dll、GDI32.dll

共享DLL感染掉,重启电脑的时候,所有调用它的都会被感染! 它允许程序共享执行特殊任务所必需的代码和其他资源。

比较大的应用程序都由很多模块(动态链接库)组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。Windows系统平台上提供了一种完全不同的比较有效的编程和运行环境。可以将独立的程序模块创建为较小的DLL文件,并可对它们单独编译和测试。

在运行时,只有当EXE程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了EXE文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序调用,Windows自己就将一些主要的系统功能以DLL模块的形式实现。DLL由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程和虚拟空间中,成为调用进程的一部分。

几个注意点:

如果与其他DLL之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。

DLL模块中包含各种导出函数,用于向外界提供服务,exe

一个DLL在内存中只有一个实例;

DLL实现了代码封装性,调用时只看到dll提供的接口;

DLL的编制与具体的编程语言及编译器无关。C/C++/易语言/VB/py/delphi

DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。

DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。

你可能感兴趣的:(逆向基础学习)