`
leonard1853
  • 浏览: 85083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

参考:琢石成器

 

今天看《琢石成器》第11章,动态链接库和钩子,特此记录一下。

 

1、静态链接库

lib.exe工具将多个obj文件组合成一个lib文件,当程序需要用到这个lib文件中的子程序时,只需要指定子程序名,链接器就可以将代码插入到可执行程序中,这就是静态链接。

缺点:

1)、当多个程序要用到一段相同子程序时,就会存在相同代码,浪费空间(包括磁盘空间和多个程序装入内存的内存空间);

2)、如果用到的子程序有修改,所有的程序都需要重新编译。

 

2、动态链接库

动态链接库的代码在程序链接时不会插入到代码中,在程序运行时才将整个库中的代码调入内存,所以叫动态链接。

 

动态链接库的代码在内存中永远只有一份,它会映射到不同进程的地址空间中,而数据段还是会映射到不同的内存中,有多少个程序使用动态链接库,就有多少段数据段(如果想实现数据共享,需要将数据放在一个节中,并且在链接时需要指定该节属性为共享,如:/section:.bss,S).

 

3、实现动态链接库

1)、入口点

入口函数的结构: DllEntry proc hInstDll, dwReason, dwReserved

hInstDll:动态链接库的模块实例句柄,需要保存来对动态链接库进行操作,该入口函数是获得该句柄的唯一途径。在库中用GetModuleHandle获得的是动态链接库所属程序的句柄;

dwReason:根据所传的值进行初始化或者其他操作(有四个值);

dwReserved:保留字

 

入口函数是供操作系统调用的,通过dwReason值说明是哪种情况,分别进行处理,并返回成功与否;

 

2)、导出函数

动态链接库设计需要一个*.def文件,用来告诉链接器哪些函数是可以被其他程序调用的,格式:

EXPORTS methodName1

methodName2

由于dll是PE格式的,链接器就将def文件中EXPORTS所指定的函数加入到PE文件的导出表中,指明这些函数可以归其他程序调用;

 

3)、链接时必须使用/Dll 和 /Def选项

 

4)、链接结果:除了生成dll文件外,链接器还将生成两个文件:lib和exp文件,其中lib文件就是动态链接库的导入库文件,如果dll是程序的一部分,则不需要该lib文件;但是如果dll需要开发使用,则必须提供导入库文件,也就是includelib指定的。

为了能让不同语言使用动态链接库,需要提供支持不同语言的头文件。

 

4、使用动态链接库

1)、直接使用:如在win32中,include和includelib动态链接库的inc和导入库lib就行了;

2)、动态装入:需要用三个api函数装载、释放动态链接库和获取导出函数地址,分别是:LoadLibrary, FreeLibrary, GetProcAddress,这样就不需要include头文件和导入库了,动态装载。

在Free共同使用的一个库时,各个程序间不会有影响,操作系统为每个库维护一个装入计数器,装入递增,Free递减,只有计数器为0时, 也就是库没被任何程序使用时,操作系统才会将它从内存真正释放,否则,仅是将库从某个程序的进程空间中删除映射而已。

分享到:
评论

相关推荐

    系统程序设计:动态链接库程序设计

    1.创建一个动态链接库,在该动态链接库中添加一个函数,该函数可以输出如图所示的图形; 2.在上面创建的动态链接库中添加导出类,并把绘制图形的函数添加到该类下; 3.创建一个动态链接库,在该动态链接库中添加一个...

    linux动态链接库的开发实例

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为后缀)是一种重要的编程资源,它允许多个程序共享同一份代码,从而节省内存并方便代码维护。本教程将通过一个实例深入探讨Linux下C/C++语言如何...

    C++动态链接库编程深入浅出

    ### C++动态链接库编程深入浅出 #### 概述 动态链接库(Dynamic Link Library,简称DLL)是在Microsoft Windows操作系统环境下的一种共享库文件格式。它允许开发者将多个应用程序所需的公共功能封装到一个单独的...

    动态链接库实验报告.pdf

    ### 动态链接库实验报告知识点梳理 #### 动态链接库(DLL)概念 动态链接库(Dynamic Link Library,简称DLL)是一种实现代码和数据模块化的方式。它是一种特殊的程序库,其中包含了可以被多个程序同时使用的代码和...

    单片机动态链接库demo_发布版v1版

    单片机动态链接库(Dynamic Link Library,DLL)是一种在嵌入式系统中实现代码复用和节省存储空间的技术。在传统的计算机系统中,DLL主要应用于Windows操作系统,而在单片机环境中,它同样能帮助我们优化资源利用,...

    静态、动态链接库的创建和调用

    在现代软件开发中,为了代码复用和模块化设计,经常会用到静态链接库和动态链接库这两种形式的库。静态链接库在编译时期与应用程序链接,而动态链接库则在运行时期加载。 首先,我们来谈谈静态链接库。创建静态库的...

    C# dll的调用(动态链接库创建与使用)

    在编程世界中,动态链接库(DLL,Dynamic Link Library)是一种重要的共享代码资源,它可以被多个应用程序同时调用,以节省内存并实现代码重用。C# 作为.NET框架的一部分,同样支持创建和调用DLL。本文将深入探讨C#...

    动态链接库的建立与调用

    ### 动态链接库的建立与调用 #### 实验目的 本实验旨在帮助学习者深入理解动态链接库(Dynamic Link Library,简称DLL)的工作原理及其在Windows环境下的具体实现方式。通过动手实践,学生将能够熟悉DLL的创建流程...

    opencv动态链接库

    OpenCV动态链接库是计算机视觉领域中非常重要的一个组件,它是OpenCV库的动态版本,允许开发者在程序中调用其丰富的图像处理和计算机视觉功能。动态链接库(Dynamic Link Library,DLL)是一种Windows操作系统中的...

    动态链接库的例子

    动态链接库(DLL,Dynamic Link Library)是Windows操作系统中一种重要的共享代码机制,它允许多个程序同时使用同一段代码,从而节省内存并提高系统效率。VC++是Microsoft开发的C++编译器,广泛用于Windows平台上的...

    pb动态链接库,经典,好用

    PB动态链接库(PB是PowerBuilder的缩写)是指由PowerBuilder开发的动态链接库文件。PowerBuilder是一款强大的、基于事件驱动的可视化编程工具,主要用于构建数据库应用系统。它以其易用性、高效的数据库访问能力和...

    VC++动态链接库(dll)编程深入浅出-----PDF和源码

    静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。  对动态链接库,我们还需建立如下概念:  (1)DLL 的...

    Visual C++动态链接库

    Visual C++ 动态链接库是指在 Visual C++ 环境下开发和使用的动态链接库,动态链接库是一种共享代码的方式,可以提供给开发者一些可以直接使用的变量、函数或类。下面是对 Visual C++ 动态链接库的详细介绍。 首先...

    用devc++制作动态链接库

    ### 用Dev-C++制作动态链接库(DLL)详解 #### 概述 动态链接库(Dynamic Link Library,简称DLL)是一种在Windows操作系统下广泛使用的共享库格式。它允许程序和其他模块共享代码和数据,从而提高了软件开发的效率...

    如何制作动态链接库,动态链接库的制作。

    ### 如何制作动态链接库(DLL)及其实现方法 #### 动态链接库简介 动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中一种共享库的形式,它允许多个应用程序共享相同的代码和数据。DLL文件包含了可以...

    动态链接库的使用

    ### 动态链接库(Dynamic Link Library,DLL)的使用 #### 一、概述 动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统中的一种共享库形式,它允许多个应用程序共享相同的代码和数据,从而减少了内存...

    使用VC++进行动态链接库的设计

    在VC++环境中,动态链接库(DLL)是一种高效利用系统资源的方法,它可以将代码和数据共享给多个应用程序,从而减少内存占用和提高程序执行效率。本教程将详细讲解如何使用VC++来设计和构建动态链接库,并通过创建...

    Matlab动态链接库编程

    ### Matlab动态链接库编程技术详解 #### 摘要 本文深入探讨了如何在Matlab环境中利用动态链接库(Dynamic Link Library,DLL)技术来增强程序性能和功能。通过使用DLL,用户能够在Matlab中调用其他编程语言(如C/...

    动态链接库编程

    【动态链接库编程】是Windows系统编程中的一个重要概念,它涉及到程序模块的组织和复用。动态链接库(DLL)允许开发人员将功能模块化,这些模块可以在多个应用程序之间共享,从而节省内存资源并便于代码维护。以下是...

    Fortran语言的动态链接库的开发及应用

    Fortran 语言的动态链接库的开发及应用是指利用 Fortran 语言编译成动态链接库,然后在其他语言环境中调用该动态链接库,以解决 Fortran 语言在图形界面、可视计算、面对对象、事件驱动、数据库应用等方面的局限性。...

Global site tag (gtag.js) - Google Analytics