我试图理解当具有全局变量和静态变量的模块动态链接到应用程序时会发生什么.通过模块,我的意思是解决方案中的每个项目(我使用visual studio工作很多!).这些模块内置于*.lib或*.dll或*.exe本身.
我知道应用程序的二进制文件包含数据段中所有单个转换单元(目标文件)的全局和静态数据(如果是const,则只读取数据段).
当此应用程序使用带有加载时动态链接的模块A时会发生什么?我假设DLL有一个全局和静态的部分.操作系统是否加载它们?如果是这样,他们在哪里被加载?
当应用程序使用带有运行时动态链接的模块B时会发生什么?
如果我的应用程序中有两个使用A和B的模块,则是如下所述创建的A和B的全局变量的副本(如果它们是不同的进程)?
DLL A和B是否可以访问应用程序全局变量?
(请说明你的理由)
引自MSDN:
在DLL源代码文件中声明为全局的变量被编译器和链接器视为全局变量,但加载给定DLL的每个进程都获得其自身的DLL全局变量副本.静态变量的范围仅限于声明静态变量的块.因此,默认情况下,每个进程都有自己的DLL全局变量和静态变量.
从这里:
当动态链接模块时,可能不清楚不同的库是否有自己的全局变量实例或者是否共享全局变量.
谢谢.
有没有办法在两个进程之间共享内存?
第二个过程从注入中获取信息,因为它是一个遗留程序,它不再受支持.
我的想法是在那里注入一些代码,在我传递给注入程序的结构中将地址(或其他)传递给我需要运行的数据所在的共享内存.一旦我得到数据,我将在注入的线程中填充我自己的变量.
这可能吗?怎么样?
代码表示赞赏.
编辑:
我认为现在还不清楚所以我会澄清一下.我知道如何注射.我已经这样做了.这里的问题是将动态数据传递给注入.