Mi chiedevo se fosse possibile accedere a un blocco di memoria diretto utilizzando C/C++ e prendere il valore. Per esempio:Accesso agli indirizzi di memoria diretti e ottenimento dei valori in C++
int i = 15;
int *p = &i;
cout << &i;
Se ho preso il valore stampato qui, che mi avrebbe dato l'indirizzo della variabile i, che contiene il valore 15. Mi limito a dire che stampato 0x0ff9c1 per questo esempio. Se ho un programma separato che dichiara un puntatore in questo modo ...
int *p = 0x0ff9c1;
cout << *p;
sarebbe possibile stampare che il 15 che l'altra applicazione collocato nella 0x0ff9c1 blocco di memoria? So che la mia dichiarazione puntatore con l'indirizzo di memoria non è corretto, non sono sicuro di come farlo altrimenti. Ho provato a utilizzare memcopy
ma non sono riuscito a farlo funzionare. So che questo è possibile in qualche modo perché ho un programma chiamato Cheat Engine che modifica i valori dell'indirizzo di memoria di gioco per ottenere vantaggi ingiusti. Ho avuto successo nel posizionare la posizione della memoria stampata e ottenere il valore (15) nonostante Cheat Engine. Il mio obiettivo è farlo usando C++. Se questo è troppo confuso, fondamentalmente mi piacerebbe accedere a una variabile che un'altra applicazione memorizza usando il suo indirizzo di memoria e stampare il valore. Sto usando Windows 7 x64 con il compilatore MinGW se questo è importante. Grazie!
PS: posterò un'immagine di ciò che Cheat Engine fa per dare un'idea migliore.
+1 per tali esperimenti. – Nawaz
legge un libro sulla memoria virtuale. Come nota aggiuntiva: Linux e alcune nuove versioni di Windows impiegano la randomizzazione dello stack, quindi gli indirizzi delle variabili locali varieranno tra le esecuzioni del programma. – unkulunkulu
Sì, nonostante la sperimentazione l'ho scoperto. Stavo pensando di esportare l'indirizzo attraverso un argomento di esecuzione per il secondo programma. Guarderò nella memoria virtuale, grazie per il suggerimento. – llk