Accessing direct memory addresses and obtaining the values in C++

llk picture llk · Sep 1, 2011 · Viewed 18.6k times · Source

I was wondering if it was possible to access a direct block of memory using C/C++ and grab the value. For example:

int i = 15;
int *p = &i;
cout << &i;

If I took the printed value here, that would give me the address of the variable i, which contains the value 15. I will just say it printed out 0x0ff9c1 for this example. If I have a separate program which declares a pointer like so...

int *p = 0x0ff9c1;
cout << *p;

Would it be possible to print out that 15 that the other application placed in the memory block 0x0ff9c1? I know my pointer declaration with the memory address is incorrect, I am unsure how to do it otherwise. I have tried using memcopy but I have not been able to get that to work either. I know this is possible somehow as I have a program called Cheat Engine which modifies game memory address values to gain unfair advantages. I have been successful in placing the printed memory location and obtaining the value (15) though Cheat Engine. My goal is to do this using C++. If this is too confusing, basically I would like to access a variable that another application stored using its memory address and print out the value. I am using Windows 7 x64 with MinGW compiler if that matters. Thanks!

PS: I'll post a picture of what Cheat Engine does to give a better idea. enter image description here

Answer

Ed Heal picture Ed Heal · Sep 1, 2011

The two processes have separate address spaces. One process cannot access another processses memory unless it is explicily shared memory.