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, я вижу, что оно изменилось в ячейке памяти; однако, я не вижу изменения значения, если я перезапущу второй экземпляр.
Почему отладчик не может записать фактический раздел с разделением (память)?