Establecer un valor en el depurador de una sección compartida
Tengo el siguiente código en una DLL:
#pragma data_seg("ABC")
__declspec (dllexport) char abc[2000] = { 0 };
#pragma data_seg()
#pragma comment(linker, "-section:ABC,rws")
Tengo el siguiente código en un ejecutable:
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);
}
Cuando ejecuto la primera instancia del programa obtengo:
Value: 0 0FC2A000
Value: 66 0FC2A000
Si ejecuto una segunda instancia, obtengo lo siguiente porque están usando la misma sección compartida:
Value: 66 0FC2A000 <- Notice the value here is set
Value: 66 0FC2A000
Sin embargo, si cambio el valor en primera instancia usando el depurador de Visual Studio, puedo ver que cambió en la ubicación de la memoria; sin embargo, no puedo ver el cambio de valor si vuelvo a ejecutar la segunda instancia.
¿Por qué el depurador no puede escribir la sección real compartida (memoria)?