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

