在共享部分

时间:2017-06-09 15:56:00

标签: shared-memory visual-studio-debugging

我在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调试器更改第一个实例中的值,我可以看到它在内存位置发生了变化;但是,如果我重新运行第二个实例,我看不到值的变化。

为什么调试器无法编写实际的共享(内存)部分?

1 个答案:

答案 0 :(得分:0)

我得到了与你相同的结果:

enter image description here

我的理解是在调试期间共享内存中没有共享某些值。

https://blogs.msdn.microsoft.com/oldnewthing/20040804-00/?p=38253/