27-12-2014, 12:50 AM
كود :
function CheckSumMappedFile(BaseAddress:Pointer;FileLength:LongWord;var HeaderSum,CheckSum:LongWord):PImageNtHeaders cdecl;
asm
push ebx
push esi
push edi
mov edx, BaseAddress
xor esi, esi
mov eax, edx
cmp word ptr [eax], 'ZM'
jnz @L8
mov esi, [eax+3Ch]
add esi, edx
cmp dword ptr [esi], 'EP'
jz @L0
xor esi, esi
jmp @L8
@L0:xor eax, eax
mov ecx, edx
xor edx, edx
jmp @L3
@L1:movzx ebx, word ptr [ecx]
add eax, ebx
mov ebx, eax
shr ebx, 10h
test ebx, ebx
jz @L2
movzx ebx, ax
shr eax, 10h
add ebx, eax
mov eax, ebx
@L2:add ecx, 2
inc edx
@L3:mov ebx, FileLength
inc ebx
shr ebx, 1
cmp edx, ebx
jb @L1
mov edx, eax
shr edx, 10h
add dx, ax
mov eax, edx
movzx eax, ax
mov ecx, [esi+58h]
mov edx, ecx
cmp dx, ax
ja @L4
movzx ebx, dx
sub eax, ebx
jmp @L5
@L4:movzx eax, ax
movzx ebx, dx
sub eax, ebx
and eax, 0FFFFh
dec eax
@L5:mov ebx, edx
shr ebx, 10h
movzx edi, ax
cmp ebx, edi
ja @L6
shr edx, 10h
sub eax, edx
jmp @L7
@L6:movzx eax, ax
shr edx, 10h
sub eax, edx
and eax, 0FFFFh
dec eax
@L7:add eax, FileLength
mov edx, CheckSum
mov [edx], eax
mov eax, HeaderSum
mov [eax], ecx
@L8:mov eax, esi
pop edi
pop esi
pop ebx
end;
