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]

