创建DLL模块

26 篇文章 1 订阅

若要创建D L L模块,必须执行下列操作步骤:

1) 首先必须创建一个头文件,它包含你想要从DLL输出的函数原型、结构和符号。DLL的所有源代码模块均包含该头文件,以帮助创建DLL。当创建需要使用DLL中包
含的函数和变量的可执行模块(或多个模块)时,也需要这个头文件。
2) 要创建一个C/C + +源代码模块(或多个模块),用于实现你想要在DLL模块中实现的函数和变量。由于这些源代码模块在创建可执行模块时是不必要的,因此创建DLL能够保护秘密。
3) 创建DLL模块,将使编译器对每个源代码模块进行处理,产生一个.obj模块(每个源代码模块有一个.obj模块)。
4) 当所有的.obj模块创建完成后,链接程序将所有.obj模块的内容组合在一起,产生一个DLL映象文件。该映像文件(即模块)包含了用于DLL的所有二进制代码和全局/静态数据变
量。为了执行这个可执行模块,该文件是必不可少的。
5) 如果链接程序发现DLL的源代码模块至少输出了一个函数或变量,那么链接程序也生成一个.lib文件。这个.lib文件很小,因为它不包含任何函数或变量。它只是列出所有已输出函数
和变量的符号名。为了创建可执行模块,该文件是必不可少的。一旦创建了D L L模块,就可以创建可执行模块。其创建步骤是:
6) 在引用函数、变量、数据、结构或符号的所有源代码模块中,必须包含DLL开发人员创建的头文件。
7) 要创建一个C/C + +源代码模块(或多个模块),用于实现你想要在可执行模块中实现的函数和变量。当然该代码可以引用DLL头文件中定义的函数和变量。
8) 创建可执行模块,将使编译器对每个源代码模块进行处理,生成一个.obj模块(每个源代码模块有一个.obj模块)

9) 当所有.obj模块创建完成后,链接程序便将所有的.obj模块的内容组合起来,生成一个可执行的映像文件。该映像文件(或模块)包含了可执行文件的所有二进制代码和全局/静态变量。
该可执行模块还包含一个输入节,列出可执行文件需要的所有DLL模块名。此外,对于列出的每个DLL名字,该节指明了可执行模块的二进制代码引用了哪些函数和变量符号。一旦D L L和可执行模块创建完成,一个进程就可以执行。

当试图运行可执行模块时,操作系统的加载程序将执行下面的操作步骤:
10) 加载程序为新进程创建一个虚拟地址空间。可执行模块被映射到新进程的地址空间。加载程序对可执行模块的输入节进行分析。对于该节中列出的每个DLL名字,加载程序要找出
用户系统上的DLL模块,再将该DLL映射到进程的地址空间。注意,由于DLL模块可以从另一个DLL模块输入函数和变量,因此DLL模块可以拥有它自己的输入节。若要对进程进行全面的
初始化,加载程序要分析每个模块的输入节,并将所有需要的DLL模块映射到进程的地址空间。

一旦可执行模块和所有DLL模块被映射到进程的地址空间中,进程的主线程就可以启动运行,同时应用程序也可以启动运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值