Edytowałem 1.c, jak poniżej.jak uzyskać dostęp do pamięci przydzielonej do różnych procesów?
#include<stdio.h>
int x=100;
int main(void)
{
printf("%p",&x);
while(1);
return 0;
}
Następnie otworzyłem wiersz poleceń i uruchomiłem ten program i otrzymałem wynik 00402000 podczas działania programu. Teraz biegnę 2.C
#include<stdio.h>
int main(void)
{
int *p=(int *)0x00402000;
printf("%d",*p);
return 0;
}
w innej instancji wiersza polecenia i dostał wyjście -1, spodziewam 100, który znajduje się w miejscu 00402000. proszę wyjaśnić, dlaczego jest to zachowanie?
Brak nowoczesnego wielozadaniowego systemu operacyjnego umożliwia dostęp do pamięci z innych procesów. Warto jednak przeczytać o [wspólnej pamięci] (http://en.wikipedia.org/wiki/Shared_memory). Powodem, dla którego nie można użyć innej pamięci procesu, jest to, że oba procesy mają swoją własną mapę pamięci, a to wszystko [pamięć wirtualna] (http://en.wikipedia.org/wiki/Virtual_memory). Jeśli dodałeś zmienną globalną do drugiego programu i wydrukowałeś jej adres, może to być nawet ten sam adres, co pierwszy proces. –
To nie prawda. Moduły jądra mają uprawnienia jądra – Magn3s1um
@Joachim: powiedz to do API ReadProcessMemory. Oczywiście, że tak, jak inaczej debugować? To tylko uprzywilejowana operacja. –