初识动态链接库(DLL)

Ustinain 等级 868 1 0

初识DLL

DLL是Dynamic link Library 的缩写以为动态链接库。

在Windows中,许多的应用程序并不是一个完整的可执行文件,会被分成一些相对独立的动态链接库,如DLL文件,放置于系统中 比如: Windows系统是许多动态链接库(DLL)组成的 初识动态链接库(DLL) 是Windows最基本的应用程序

但我们执行运行某一个应用程序的时候,相应的DLL文件就会被程序调用,一个应用程序可以调用多个DLL,同样 一个DLL文件可以被多个应用程序所调用这样的DLL文件被称为共享DLL文件

如果感染了共享DLL,在重启电脑的时候,所有调用它的都会被感染

它允许程序共享执行特殊任务所必需的代码和其他资源,比较大的应用程序都有很多模块(动态链接库)组成,这些模块分别完成相对独立的功能,他们彼此写作来完成整个系统软件的工作 初识动态链接库(DLL)

Windows 系统平台上提供了一种完全不同的较为有效的变成和原型环境,你可以将独立的程序模块创建为较小的DLL文件,并可对他们单独编译和测试,在运行的时候,只有exe程序需要调用盗这些dll模块的情况下,系统才会将他们装在到内存空间中,这种方式不仅间少了exe文件的大小和内存空间的需求,而且可以使这些dll模块同时被多个应用程序调用,Windows本身就将一些主要的系统功能以dll文件的形式所实现。

一般来说,dll是一种磁盘文件,以dll、drv、fon、sys和诸多以.exe为扩展名的系统文件都可以是dll(动态链接库)

dll,算是一种windwows自带的程序编程接口,它是由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间中,称为进程的一部分

初识动态链接库(DLL)

PS:

  1. 如果以其他dll之间没有冲突,该文件通常映射到进程虚拟空间的同一地址
  2. dll模块包含各种到处函数,用于向外界提供服务,一个dll在内存中只有一个实例,多个应用程序调用同一个
  3. dll实现了代码封装性
  4. dll的编制与句题的编程语言及编译器勿关,C、C++、C#、易语言、python、VB、delphi
  5. dll模块需要的堆栈内存都是从运行进程堆栈中分配出来的
  6. dll函数中的代码所创建的任何对象(包括变量)都归调用它的进程线程所有
收藏
评论区

相关推荐

初识动态链接库(DLL)
初识DLLDLL是Dynamic link Library 的缩写以为动态链接库。在Windows中,许多的应用程序并不是一个完整的可执行文件,会被分成一些相对独立的动态链接库,如DLL文件,放置于系统中比如:Windows系统是许多动态链接库(DLL)组成的是Windows最基本的应用程序但我们执行运行某一个应用程序的时候,相应的DLL文件就会被程
dll导出函数
导出函数的概念为什么要导出函数,导出来用来干什么? 前面我们说过,初识DLL,当我们执行某一个程序的时候,相应的dll文件会被调用,一个程序可以调用多个dll,一个dll也可以被多个应用程序调用那么它是调用了全部的东西吗,还是调用了内部一些不为人知的东西举一个例子:你去便利店买水果,你和售货员说,你要买下整个便利店,那么她还以为你是个神经病,肯定不会卖,你要
WPS2010版本DLL劫持漏洞复现(plgpf.dll)
WPS Office plgpf.dll DLL劫持漏洞 原理简单说就是 exe 文件寻找 DLL 库会优先在当前目录下寻找,若 DLL 库未经过校验或者寻找 DLL 路径不是绝对路径,容易导致 DLL 被本地攻击者劫持 漏洞描述+ CVE 编号:CVE 2010 5208+ WPS office 套件应用程序在加载外部库 (DLL) 时通过了一个不合格
利用CreateRemoteThread( ) 实现远程线程注入
前言首先想法是 强制创建一个目标进程的线程,把我自己的恶意DLL加载进去被注入的DLL拥有目标进程内存的访问权限,所以我们可以通过该向某个进程注入DLL时的方法主要有以下三种:• 创建远程线程(CreateRemoteThread() API)• 使用注册表(AppInitDLLs值)• 消息钩取(SetWindowsHookEx()) 小试牛刀目前尝试第一
日子越来越有判头了?用DLL劫持,搞点事情!
0x01 dll简介在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式。这就是DLL(Dynamic Link Library),即动态链接库,这种库包含了可由多个程序同时使用的代码和数据。每个DLL都有一个入口函数(DLLMain),系统在特定环境下会调用DLLMain。在下面的事件发生时就会调用d
dll通用操作单元
dll通用操作单元 /// <author>cxg 2019-3-4</author> /// 装载(释放)DLL /// 适用于Delphi所有版本 unit ynDLL; interface uses Classes, Windows, SysUtils;
Java通过JNI的方式调用C
### 1、调用原理 用java的javah命令将java native 方法编译成.h,在C程序中调用此.h文件,并实现.h文件里面声明的方法,编译生成.dll文件,最后java通过System.loadLibrary()加载.dll文件,调用具体的方法实现; ### 2、具体操作步骤: 1、编译JAVA类 public class Tes
2014百度校园招聘软件研发类笔试(深圳)
时间:2013年9月28日。 地点:深圳 职位:软件研发 问答题:(10\*3) 1.动态链接库(DLL)与静态链接库(lib)的优缺点: 静态链接库和动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都全部被直接包含在最终的EXE文件中,若使用DLL,该DLL不必被包含在最终的EXE中,EXE文件
MFC DLL 导出函数的定义方式
一直在鼓捣DLL,每天的工作都是调试一个一个的DLL,往DLL里面添加自己的代码,但是对于DLL一直不太了解啊!今天一查资料,才发现自己对于DLL编写的一些基本知识也不了解。要学习,这篇文章先总结DLL的导出函数的方法。 1. 首先说一下如何建立一个普通的DLL工程!(以VS2008为例) New Project  -->  Win32 标签 --
vs2010
asp.net webform vs2008 发布网站的时候dll文件名是动态的不固定,需要使用插件生成固定名称dll vs2008 发布web项目的时候就不需要插件了,直接发布就是固定名称的dll vs2010 之后网站与web项目都可以生成固定名称的dll asp.net mvc vs2013-vs2019 1.发布mvc项目的时候可以生成之后直接复制
TCP的粘包问题以及数据的无边界性
服务端: #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib")  //加载 ws2_32.dll   #define BUF_SIZE 100   int main(int argc, char *ar
DLL如何导出类?
其实最好是写一个父类,把要实现的函数全部以虚函数的形式写在父类中,然后写一个子类,继承父类,重写父类的虚函数。这样的话就安全得多了。其次就在DLL中导出一个函数,返回父类的一个对象指针,再在EXE中动态链接DLL,调用导出函数。例子如下: //以下是DLL的代码 //class\_a.h class A { public:
DLL核心编程
      现在只要做关于dll,为了dll有更好的应用以及跨平台,一般采用自己写,不用系统的生成!不管用dll做什么事情,如一般用在大型项目软件中或为3D引擎的dll,都采用自己编,我把这段代码放出后可能很多人觉得这个太简单了,但是越是简单的东西越不简单,我记得我以前和别人就讲hello,world的c程序,我讲了五个小时还没讲完。并且这也是所有的dll的
VC++动态链接库(DLL)编程深入浅出(一)
**1.概论**   先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。   静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直