Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 343
llk Avatar asked Sep 01 '11 06:09

llk


People also ask

How do you access the memory address of a variable?

Usually memory addresses are represented in hexadecimal. In c++ you can get the memory address of a variable by using the & operator, like: cout << &i << endl; The output of that cout is the memory address of the first byte of the variable i we just created.

How is memory accessed in C?

When a variable is created in C, a memory address is assigned to the variable. The memory address is the location of where the variable is stored on the computer. When we assign a value to the variable, it is stored in this memory address.

How do you access the memory location of a variable in C?

In C, we can get the memory address of any variable or member field (of struct). To do so, we use the address of (&) operator, the %p specifier to print it and a casting of (void*) on the address.


2 Answers

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

like image 95
Ed Heal Avatar answered Sep 23 '22 05:09

Ed Heal


You can't do it in a platform-agnostic way in C++. While I haven't used this "cheat engine" specifically, it almost certainly is using the same special API that a debugger uses. The code will be specific to Windows, and you will require a certain privilege level on the running process.

(For instance, if you are using Visual Studio and execute a program from it in a Debug Mode, Visual Studio can look at and modify values in that program.)

I haven't written a debugger in a while, so I don't know where a good place to get started on the Debug API is, but you can search around the web for things like this article:

http://www.woodmann.com/fravia/iceman1.htm

like image 39
HostileFork says dont trust SE Avatar answered Sep 20 '22 05:09

HostileFork says dont trust SE