Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


CE 64 bit Step 6 Problems

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine
View previous topic :: View next topic  
Author Message
John_Smith
How do I cheat?
Reputation: 0

Joined: 30 Dec 2019
Posts: 3

PostPosted: Thu Jan 02, 2020 12:55 am    Post subject: CE 64 bit Step 6 Problems Reply with quote

Okay so this is related to a post here by someone else: (just realised I can't post links yet, but it's titled: CE 6.7 64-Bit Tutorial - STEP 6)

But for some reason I cannot post a reply, not sure if it's locked.

So pretty much as the previous poster stated:
Quote:
I find my value and select "Find out what ACCESSES this address"
and get four addresses.


So Dark Byte replied with this:
Quote:
To have an easy time, just pick the writer instruction, but if you wish to understand what happens instead of blindly following a track, pick the read instruction:
Code:

Code:
mov eax,[rax]


Note the "more info" screen text that states that "registers shown are AFTER the instruction has been executed"
that means that EAX(RAX) has been overwritten by the value in [RAX]

all you know is that mov eax,[rax] accessed 1294d10
which is enough. As that means that the value between [] ended up at 1294d10

so that means that RAX used to have the value 1294d10
since you can rewrite mov eax,[rax] into mov eax,[rax+0000000000000000] that means the pointer had the VALUE 1294d10 and the used offset is 0

that's all you need for that pointer step. So do a 8 byte hexadecimal scan for 1294d10 and use that result with offset 0 and then continue on till a base pointer




Sorry for all the quoting, but I don't understand Dark Byte's answer.


First Question:

When I pick the read instruction which is:

Code:
mov eax,[rax]


How do I know that it's a read instruction, is it from the "[rax]"?
Is having an "[rdx]" always a write instruction?


Second Question:

So from my research, mov eax,[rax] moves the value in memory location RAX to EAX, overwriting anything in EAX.

Dark Byte said:
Quote:
all you know is that mov eax,[rax] accessed 1294d10
which is enough. As that means that the value between [] ended up at 1294d10

so that means that RAX used to have the value 1294d10


But I'm confused, so "[rax]" means the value at memory address RAX.
So saying a read command with "registers shown AFTER command" accessed 1294d10 means that the final result was changing a value to 1294d10?

So putting that all together, the value at memory location RAX was moved to EAX, the final result was changing a value to 1294d10, so we know the value at memory location RAX that was the value moved is 1294d10?


Third Question:
How can we tell what is the offset?
If the command was mov eax,[rax+000000000000001D], would +1D be the offset in this case?


Fourth Question:
Why do we use an 8 byte scan for the memory location? Can we use a 4 byte scan instead? I looked at the tutorial video and it said because the target was 64 bits, so for 32 bits I can use 4 bytes?


Oooh, wait I think I'm starting to get it after two hours of research why the read instruction is so complicated, compared to the write instruction.

With the WRITE instruction once you've left clicked on it, that is, this one:

Code:
mov [rdx], eax


You can literally click "More information"> copy "the value of the pointer needed to find this address is probably" > search that with an 8-byte(because it's 64 bit) hexadecimal (because it's a memory address)

Simple.

However with the READ instruction:
You need to work out which memory address to search logically, with the stuff referred to in my second question, because it's replacing the "the value of the pointer needed to find this address is probably" with a new value, so you're left with the old estimated value, thus it is incorrect.

"the value of the pointer needed to find this address is probably" is only right on the write instruction.


Fifth Question:(sorry)
Final thing I was just having trouble with wrapping my head around the final part of this tutorial. So the three things we end up with after finishing this tutorial. The first is a variable health, the second is pointer to the variable health, the third is a pointer to the pointer of the variable health, which can always locate the variable health no matter how many times the game is restarted? (I think I'm wrong here)

Thank you for being patient with me, as I'm a beginner to assembly code and I spent somewhere over two hours puzzling over this task.
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 471

Joined: 09 May 2003
Posts: 25827
Location: The netherlands

PostPosted: Thu Jan 02, 2020 6:35 am    Post subject: Reply with quote

1:
mov [address],reg = write instruction (goes from reg into [address])
mov reg,[address] = read instruction (goes from [address] into red

2:
mov eax,[rax] will read the address stored at [RAX] and write it in EAX, overwriting RAX
The debugger shows you the register values after the instruction has been executed, so RAX's contents are useless to you

But the debugger did pick up the read of address 1294d10 when doing mov eax,[rax], so that means that rax held the value 1294d10 at the time of execution (or nearby there due to overlap, but that chance is very small)


3: yes, the smallest value is the offset. (Can sometimes be small register values, if they are small enough like 0,1 or 2)

4: Pointers in 64-bit programs are 8 bytes long


5: Only a non-dynamic (green) memory address can be found again by using the modulename+offset notation, so only those kinds of addresses are suitable for pointerstarts

_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites