Help File:old flash (div 8)

From Cheat Engine
Revision as of 18:57, 19 September 2016 by Dark Byte (talk | contribs) (Created page with '<hr><div align="left"><font face="Arial" color="#010101" class="Arial2"> This is just the money type adjusted to 8 (in case you didn't get it in the previous example)</font></d…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This is just the money type adjusted to 8 (in case you didn't get it in the previous example)


alloc(TypeName,256)
alloc(ByteSize,4)
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)

TypeName:
db 'Civ 5 Float',0

ByteSize:
dd 4

//The convert routine should hold a routine that converts the data to an

nteger (in eax)

//function declared as: stdcall int ConvertRoutine(unsigned char

  • input);

//Note: Keep in mind that this routine can be called by multiple threads

at the same time.

ConvertRoutine:
[32-bit]
push ebp
mov ebp,esp
push ecx
mov ecx,[ebp+8]
[/32-bit]

//at this point ecx contains the address where the bytes are stored
//save the used registers

push edx //fun fact about ce's assembler, because push ebx does not

exist in 64-bit it becomes the 64-bit push rdx automatically
push ebx

//put the bytes into the eax register

mov eax,[ecx] //second fun fact, addressing with 32-bit registers doesn't work in 64-bit, it becomes a 64-bit automatically (most of the

time)

xor edx,edx
mov ebx,#8
div ebx //divide eax by 8and put the result in eax (and leftover in edx)

pop ebx
pop edx
//and now exit the routine
[64-bit]
ret
[/64-bit]
[32-bit]
pop ecx
pop ebp
ret 4
[/32-bit]

//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new

value)

//function declared as: stdcall void ConvertBackRoutine(int i, unsigned

char *output);
ConvertBackRoutine:
[32-bit]
push ebp
mov ebp,esp
push edx //save the registers
push ecx
mov edx,[ebp+0c]
mov ecx,[ebp+08]
[/32-bit]

//at this point edx contains the address to write the value to
//and ecx contains the value
push eax
push edx
push ecx

mov eax,ecx //eax gets the given value
xor edx,edx //clear edx
mov ecx,#8

mul ecx //multiply eax and put the results into edx:eax (edx is ignored

for this routine)

pop ecx
pop edx
mov [edx],eax
pop eax

[64-bit]
//everything is back to what it was, so exit
ret
[/64-bit]

[32-bit]
//cleanup first
pop ecx
pop edx
pop ebp
ret 8
[/32-bit]