I'm new to posting on these forums but have come here multiple times for my programming help needs and have usually been able to find my answers fairly easily but I fear I might be either asking the wrong kind of questions or maybe it's very obvious and I just don't see it but here is my problem.
I am making my first trainer for Quake, I thought I would start small with a game that is easy to find pointers for instead of my other games which usually have 2+ level pointers. So I go through Quake with Cheat Engine and grab all the pointers I need, Make my gui etc but there is a problem. I read my first pointer and it returns the address I need backwards :/
Example:
Here is my pointer that i'm reading from - 006C5214
when read it gives me this address - 02BFD940
I then add my offset 48C to my address above which directs me to 02BFDDCC which contains the value I need.
when I read my pointer with ReadProcessMemory I get the correct address except it's backwards (endian?)
I need 02BFD940 I get 开发者_如何转开发40D9BF02
I've tried everything I can think of to flip around the order and get it back into an IntPtr for use in my ReadProcessMemory/WriteProcessMemory. I am able to flip it around in the order I want because my ReadProcessMemory gives my address like 40-D9-BF-02 which is easily cut into an array with Split('-');
Only problem is that after i'm done splitting and reordering it the way I want there is no way I can manage to convert it back into an IntPtr for use with my reading and writing memory functions.
I've always done my memory editing things with cheat engine or a disassembler. This is my first attempt at a fully working trainer any help with my problem would be much appreciated. I've tried setting the endian boolean on my BitConverter but it's read only :/
If i'm completely missing something and it's right there infront of me feel free to call me out on it and give me a slap upside the head xD I don't mind.
-P.S. your guys' forum is awesome.
try
byte[] buffer = new byte[4];
int bytesread;
ReadProcessMemory(hProcess, dwAddress, buffer, 4, out bytesread);
IntPtr P = new IntPtr (BitConverter.ToInt32(buffer, 0));
精彩评论