我在DLL中有以下代码:
#pragma data_seg("ABC")
__declspec (dllexport) char abc[2000] = { 0 };
#pragma data_seg()
#pragma comment(linker, "-section:ABC,rws")
我在可执行文件中有以下代码:
extern "C" __declspec(dllimport) char abc[];
char *abcPtr = abc;
#define iVar0 (*(long *)(abcPtr))
int main()
{
printf("Value: %d %p\n", iVar0, &iVar0);
iVar0 = 66;
printf("Value: %d %p\n", iVar0, &iVar0);
char buffer[256];
scanf_s("%s", buffer, 256);
}
当我运行程序的第一个实例时,我得到:
Value: 0 0FC2A000
Value: 66 0FC2A000
如果我运行第二个实例,我会得到以下内容,因为它们使用相同的共享部分:
Value: 66 0FC2A000 <- Notice the value here is set
Value: 66 0FC2A000
但是,如果我使用Visual Studio调试器更改第一个实例中的值,我可以看到它在内存位置发生了变化;但是,如果我重新运行第二个实例,我看不到值的变化。
为什么调试器无法编写实际的共享(内存)部分?
答案 0 :(得分:0)
我得到了与你相同的结果:
我的理解是在调试期间共享内存中没有共享某些值。
https://blogs.msdn.microsoft.com/oldnewthing/20040804-00/?p=38253/