After finding a certain value and creating a script on top (to be honest, creating a script is not necessary, but it can be very helpful), in the "Memory Viewer," you can right-click at the injection point of our script and choose the option "Find out what addresses this instruction accesses" to see what that part of memory effectively contains. At this point, simply right-click on our value present in the "Accessed addresses by xxxxxx" window and select "Open dissect data with selected addresses" to open the "Dissect Data Structure." This will open the dissect data, but for a specific register defined at the injection point of the code, for example, in this code:
Code: Select all
[ENABLE]
aobscan(PlayerExpOnStatusMenuA,48 63 80 C8 00 00 00 48 89 85) // should be unique
alloc(newmem,$1000,PlayerExpOnStatusMenuA)
label(code)
label(return)
label(seePlayerExp)
registersymbol(seePlayerExp)
newmem:
mov [seePlayerExp],rax
code:
movsxd rax,dword ptr [rax+000000C8]
jmp return
seePlayerExp:
PlayerExpOnStatusMenuA:
jmp newmem
nop 2
return:
registersymbol(PlayerExpOnStatusMenuA)
[DISABLE]
PlayerExpOnStatusMenuA:
db 48 63 80 C8 00 00 00
unregistersymbol(*)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: 010BCA50
010BCA26: 48 8B 00 - mov rax,[rax]
010BCA29: 90 - nop
010BCA2A: 90 - nop
010BCA2B: 90 - nop
010BCA2C: FF 90 C8 02 00 00 - call qword ptr [rax+000002C8]
010BCA32: 48 83 C4 20 - add rsp,20
010BCA36: 48 8B 86 68 02 00 00 - mov rax,[rsi+00000268]
010BCA3D: 48 89 85 F8 FE FF FF - mov [rbp-00000108],rax
010BCA44: 48 8B 04 25 E0 1E B0 33 - mov rax,[33B01EE0]
010BCA4C: 48 8B 40 58 - mov rax,[rax+58]
// ---------- INJECTING HERE ----------
010BCA50: 48 63 80 C8 00 00 00 - movsxd rax,dword ptr [rax+000000C8]
// ---------- DONE INJECTING ----------
010BCA57: 48 89 85 E0 FE FF FF - mov [rbp-00000120],rax
010BCA5E: B9 D8 99 14 05 - mov ecx,051499D8
010BCA63: 48 83 EC 20 - sub rsp,20
010BCA67: 49 BB 50 24 5B 05 00 00 00 00 - mov r11,00000000055B2450
010BCA71: 41 FF D3 - call r11
010BCA74: 48 83 C4 20 - add rsp,20
010BCA78: 48 8B 8D E0 FE FF FF - mov rcx,[rbp-00000120]
010BCA7F: 89 48 10 - mov [rax+10],ecx
010BCA82: 48 89 85 E8 FE FF FF - mov [rbp-00000118],rax
010BCA89: 48 8B 04 25 E0 1E B0 33 - mov rax,[33B01EE0]
}
My question is: can you make it so that the dissect data accesses another register, for example, RSP or RBP, etc.?
Yes, I know that you can examine these registers using other methods like "Find commonalities between addresses" (where you need at least two values entering the same offset; otherwise, this method is not usable) or the method "Show register states" followed by clicking on the "S" for "Stack view." But I would like to access different registers via "Dissect Data." I need it for a tool that helps with comparisons.
.
Here is my Cheat Engine Tutorial:
[Link]