dfzetcc
- 中级会员
- 311
- 0
- 448
- 2
- 4895.6 元
- 2014-08-22
|
1#
t
T
发表于 2015-11-09 16:54
|只看楼主
输入以下代码: 2 字节(高位优先) - alloc(TypeName,256)
- alloc(ByteSize,4)
- alloc(ConvertRoutine,1024)
- alloc(ConvertBackRoutine,1024)
- TypeName:
- db '2 Byte Big Endian',0 //CE不支持中文m
- 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]
复制代码4 字节(高位优先) - alloc(TypeName,256)
- alloc(ByteSize,4)
- alloc(ConvertRoutine,1024)
- alloc(ConvertBackRoutine,1024)
- TypeName:
- db '4 Byte Big Endian',0 //db '4 字节 (高位优先)',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]
复制代码最终效果图:
|