首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DLL中声明的全局变量会发生什么?

在Windows操作系统中,DLL(Dynamic Link Library)是一种动态链接库,它包含了一些可被其他程序调用的函数和变量。当一个程序加载了一个DLL时,这个DLL的代码就会被载入到程序的内存空间中,程序就可以调用DLL中的函数和变量。

在DLL中声明的全局变量,其作用域是整个DLL,这意味着在DLL的任何函数中都可以访问这个全局变量。当一个程序加载了这个DLL后,这个全局变量就会被载入到程序的内存空间中,并且可以在程序中的任何地方被访问。

需要注意的是,当多个程序同时加载了同一个DLL时,这些程序共享同一个DLL的实例,因此它们也共享同一个全局变量。这意味着,如果一个程序修改了这个全局变量的值,其他程序也会受到影响,因为它们共享同一个变量。

总之,在Windows操作系统中,DLL中声明的全局变量会在程序加载DLL时被载入到程序的内存空间中,并且可以在程序中的任何地方被访问。同时,如果有多个程序同时加载了同一个DLL,它们共享同一个全局变量实例。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 利用键盘钩子捕捉linux键盘动作,利用键盘钩子捕获Windows键盘动作[通俗易懂]

    引言  在科研生产中对研制、调试操作的记录是非常有必要而且是有很重要价值的。通过对记录信息的分析,可以在事故发生后准确的分析出事故的起因、操作是否存在失误等许多重要线索。通常需要记录的信息是多种多样的,如环境温度记录、软件运行记录、文件访问记录等等。这里将以键盘信息记录为例来讲述类似的实验信息自动记录的一般实现方法。  由于需要记录当前系统下所有应用程序的键盘录入记录,因此必须采取某种特殊的技术来实现本进程(监视程序)对外部进程键盘操作信息的获取。这种技术便是本文将要论述的核心–系统全局钩子。本文下面将对Win32平台下全局钩子的运行机制进行介绍并给出了一个具体的由VC 6.0编写的捕获键盘动作的键盘钩子示例程序。   系统钩子和DLL  钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递。  在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL(动态连接库)为载体进行封装,VC6中有三种形式的MFC DLL可供选择,即Regular statically linked to MFC DLL(标准静态链接MFC DLL)、Regular using the shared MFC DLL(标准动态链接MFC DLL)以及Extension MFC DLL(扩展MFC DLL)。 在本程序中为方便起见采用了标准静态连接MFC DLL。  键盘钩子程序示例  本示例程序用到全局钩子函数,程序分两部分:可执行程序KeyKook和动态连接库LaunchDLL。首先创建一个MFC AppWizard(DLL)工程,并选择Regular statically linked to MFC DLL(标准静态链接MFC DLL)选项,以建立MFC扩展动态连接库LaunchDLL.dll。之后,在相应的头文件中添加宏定义和待导出函数的声明:

    01

    内存分配——静态存储区 栈 堆 与static变量

    可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。

    03

    PE文件简介

    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。它是跨win32平台的,只要运行在Windows上,不管是在什么体系的CPU上都可以运行 PE文件使用平面的地址空间,所有代码和数据都合并在一起,组成一个很大的结构,文件的内容被分为不同的区块,块中包含代码和数据,每个区块在内存中都有其对应的权限,比如有的快只读,有的只写或者有的只可执行。 一般有以下区块: .text : 是在编译或者汇编结束时产生的一种区块,是指令的代码 .rdata :是运行时的只读数据,也就是所说的const常量 .data:初始化的数据块,也就是全局变量 .idata:包含其他外来dll的函数以及数据信息,即输入表 .rsrc:包含全部的资源,如图标、菜单、位图等等 每个区块在内存中按页边界对齐,区块没有大小限制,是一个连续的结构,每个块都有对应的属性 pe文件的优势: 磁盘上的数据结构与在内存中的结构是一致的 相关名词: 入口点(EntryPoint):程序执行的第一条指令所在的内存地址 文件偏移地址(FileOffset)PE文件存储在磁盘上的时候,各个数据的地址相对于文件头的距离为文件的偏移地址 虚拟地址(VirtuallAddress VA)应用程序访问的逻辑地址也就是它的虚拟地址 基地址(ImageBase):文件被映射到内存时,初始地址叫做基地址 pe文件大致结构如下图所示:

    02
    领券