Ho modificato 1.c come di seguito.come accedere alla memoria allocata a processi diversi?
#include<stdio.h>
int x=100;
int main(void)
{
printf("%p",&x);
while(1);
return 0;
}
Poi ho aperto il prompt dei comandi ed eseguire questo programma e ha ottenuto uscita 00.402.000, mentre il programma ancora in esecuzione. Ora scappo 2.c
#include<stdio.h>
int main(void)
{
int *p=(int *)0x00402000;
printf("%d",*p);
return 0;
}
in un'altra istanza di prompt dei comandi e ottenuto uscita -1, mi aspetto 100 che si trova in posizione 00402000. spiegare perché è questo comportamento?
Nessun moderno sistema operativo multitasking consente di accedere alla memoria da altri processi. Si potrebbe voler leggere su [memoria condivisa] (http://en.wikipedia.org/wiki/Shared_memory) però. Un motivo per cui non è possibile utilizzare un'altra memoria di processo è semplicemente perché entrambi i processi hanno una propria mappa di memoria, ed è tutto [memoria virtuale] (http://en.wikipedia.org/wiki/Virtual_memory) comunque. Se hai aggiunto una variabile globale al secondo programma e hai stampato il suo indirizzo, potrebbe anche essere lo stesso indirizzo del primo processo. –
Non è vero. I moduli del kernel hanno i privilegi del kernel – Magn3s1um
@Joachim: dirlo all'API ReadProcessMemory. Certo che lo fa, in che altro modo dovresti eseguire il debug? È solo un'operazione privilegiata. –