Difference between revisions of "Help File:Big endian 2 byte"
Jump to navigation
Jump to search
(Created page with ' <hr><div align="left"><font face="Arial" color="#010101" class="Arial2"> This script will add the 2 byte Big Endian type support to cheat engine</font></div><div align="left">…') |
|||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:Help]] | ||
+ | This script will add the 2 byte Big Endian type support to cheat engine. | ||
− | + | ||
− | + | alloc(TypeName,256) | |
− | alloc(TypeName,256) | + | alloc(ByteSize,4) |
− | alloc(ByteSize,4) | + | alloc(ConvertRoutine,1024) |
− | alloc(ConvertRoutine,1024) | + | alloc(ConvertBackRoutine,1024) |
− | alloc(ConvertBackRoutine,1024) | + | |
− | TypeName: | + | |
− | db '2 Byte Big Endian',0 | + | TypeName: |
− | ByteSize: | + | db '2 Byte Big Endian',0 |
− | dd 2 | + | |
− | //The convert routine should hold a routine that converts the data to an integer (in eax) | + | |
− | //function declared as: stdcall int ConvertRoutine(unsigned char *input); | + | ByteSize: |
− | //Note: Keep in mind that this routine can be called by multiple threads at the same time. | + | dd 2 |
− | ConvertRoutine: | + | |
− | //jmp dllname.functionname | + | |
− | [64-bit] | + | //The convert routine should hold a routine that converts the data to an integer (in eax) |
− | //or manual: | + | //function declared as: stdcall int ConvertRoutine(unsigned char *input); |
− | //parameters: (64-bit) | + | //Note: Keep in mind that this routine can be called by multiple threads at the same time. |
− | //rcx=address of input | + | ConvertRoutine: |
− | xor eax,eax | + | //jmp dllname.functionname |
− | mov ax,[rcx] //eax now contains the bytes 'input' pointed to | + | [64-bit] |
− | xchg ah,al //convert to big endian | + | //or manual: |
− | ret | + | //parameters: (64-bit) |
− | [/64-bit] | + | //rcx=address of input |
− | [32-bit] | + | xor eax,eax |
− | //jmp dllname.functionname | + | mov ax,[rcx] //eax now contains the bytes 'input' pointed to |
− | //or manual: | + | xchg ah,al //convert to big endian |
− | //parameters: (32-bit) | + | |
− | push ebp | + | |
− | mov ebp,esp | + | ret |
− | //[ebp+8]=input | + | [/64-bit] |
− | //example: | + | |
− | mov eax,[ebp+8] //place the address that contains the bytes into eax | + | |
− | mov ax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value | + | [32-bit] |
− | and eax,ffff //cleanup | + | //jmp dllname.functionname |
− | xchg ah,al //convert to big endian | + | //or manual: |
− | pop ebp | + | //parameters: (32-bit) |
− | ret 4 | + | push ebp |
− | [/32-bit] | + | mov ebp,esp |
− | //The convert back routine should hold a routine that converts the given integer back to a row of | + | //[ebp+8]=input |
− | bytes (e.g when the user wats to write a new value) | + | //example: |
− | //function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output); | + | mov eax,[ebp+8] //place the address that contains the bytes into eax |
− | ConvertBackRoutine: | + | mov ax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value |
− | //jmp dllname.functionname | + | and eax,ffff //cleanup |
− | //or manual: | + | xchg ah,al //convert to big endian |
− | [64-bit] | + | |
− | //parameters: (64-bit) | + | |
− | //ecx=input | + | pop ebp |
− | //rdx=address of output | + | ret 4 |
− | //example: | + | [/32-bit] |
− | xchg ch,cl //convert the little endian input into a big endian input | + | |
− | mov [rdx],cx //place the integer the 4 bytes pointed to by rdx | + | |
− | ret | + | //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) |
− | [/64-bit] | + | //function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output); |
− | [32-bit] | + | ConvertBackRoutine: |
− | //parameters: (32-bit) | + | //jmp dllname.functionname |
− | push ebp | + | //or manual: |
− | mov ebp,esp | + | [64-bit] |
− | //[ebp+8]=input | + | //parameters: (64-bit) |
− | //[ebp+c]=address of output | + | //ecx=input |
− | //example: | + | //rdx=address of output |
− | push eax | + | //example: |
− | push ebx | + | xchg ch,cl //convert the little endian input into a big endian input |
− | mov eax,[ebp+8] //load the value into eax | + | mov [rdx],cx //place the integer the 4 bytes pointed to by rdx |
− | mov ebx,[ebp+c] //load the address into ebx | + | |
− | //convert the value to big endian | + | |
− | xchg ah,al | + | ret |
− | mov [ebx],ax //write the value into the address | + | [/64-bit] |
− | pop ebx | + | |
− | pop eax | + | |
− | pop ebp | + | [32-bit] |
− | ret 8 | + | //parameters: (32-bit) |
− | [ | + | push ebp |
+ | mov ebp,esp | ||
+ | //[ebp+8]=input | ||
+ | //[ebp+c]=address of output | ||
+ | //example: | ||
+ | push eax | ||
+ | push ebx | ||
+ | mov eax,[ebp+8] //load the value into eax | ||
+ | mov ebx,[ebp+c] //load the address into ebx | ||
+ | | ||
+ | | ||
+ | //convert the value to big endian | ||
+ | xchg ah,al | ||
+ | | ||
+ | | ||
+ | mov [ebx],ax //write the value into the address | ||
+ | pop ebx | ||
+ | pop eax | ||
+ | | ||
+ | | ||
+ | pop ebp | ||
+ | ret 8 | ||
+ | [/32-bit] | ||
+ | |||
+ | |||
+ | == Links == | ||
+ | * [[Cheat Engine:Help File|Help File]] | ||
+ | |||
+ | * [[Help_File:old_flash_(div_8)|Back]] | ||
+ | |||
+ | * [[Help_File:Big_endian_4_byte|Next]] |
Latest revision as of 12:01, 19 March 2017
This script will add the 2 byte Big Endian type support to cheat engine.
alloc(TypeName,256) alloc(ByteSize,4) alloc(ConvertRoutine,1024) alloc(ConvertBackRoutine,1024) TypeName: db '2 Byte Big Endian',0 ByteSize: dd 2 //The convert routine should hold a routine that converts the data to an integer (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: //jmp dllname.functionname [64-bit] //or manual: //parameters: (64-bit) //rcx=address of input xor eax,eax mov ax,[rcx] //eax now contains the bytes 'input' pointed to xchg ah,al //convert to big endian ret [/64-bit] [32-bit] //jmp dllname.functionname //or manual: //parameters: (32-bit) push ebp mov ebp,esp //[ebp+8]=input //example: mov eax,[ebp+8] //place the address that contains the bytes into eax mov ax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value and eax,ffff //cleanup xchg ah,al //convert to big endian 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: //jmp dllname.functionname //or manual: [64-bit] //parameters: (64-bit) //ecx=input //rdx=address of output //example: xchg ch,cl //convert the little endian input into a big endian input mov [rdx],cx //place the integer the 4 bytes pointed to by rdx ret [/64-bit] [32-bit] //parameters: (32-bit) push ebp mov ebp,esp //[ebp+8]=input //[ebp+c]=address of output //example: push eax push ebx mov eax,[ebp+8] //load the value into eax mov ebx,[ebp+c] //load the address into ebx //convert the value to big endian xchg ah,al mov [ebx],ax //write the value into the address pop ebx pop eax pop ebp ret 8 [/32-bit]