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

я есть следующий код в 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)

Ваш ответ на вопрос