21,459
社区成员
发帖
与我相关
我的任务
分享
;首先假设我已经把PE文件映射的起始地址放入ebx了!
mov ecx, _dwSize ;PE文件大小
shr ecx, 01h ;因为每次读2字节,所以循环次数是长度的一半。部分资料为了处理奇数在这里要+1再右移或其他方法,但本帖我就找偶数长度PE测试也是不对的,所以这里就不写那些兼容处理部分了;
xor edx, edx
xor eax, eax
clc
@@:
mov ax, word ptr [ebx]
adc dx, ax
add ebx, 02h
loop @B
mov eax, edx
add eax, _dwSize ;这样就算是计算完毕了。
;首先假设我已经把PE文件映射的起始地址放入ebx了!
mov ecx, _dwSize
shr ecx, 01h
xor edx, edx
clc
@@:
;------------------------------------
movzx eax, word ptr [ebx]
add ebx, eax
mov eax, edx
and edx, 0ffffh
shr eax, 10h
add edx, eax
;------------------------------------
add ebx, 02h
loop @B
mov eax, edx
add eax, _dwSize
shr ecx, 01h ;esi中已经存放PE映射的首地址了,ecx为PE长度的一半,先不考虑奇数,最后处理。。。
xor edx, edx
clc
@@:
lodsw
adc dx, ax
loop @B
pop ecx
push ecx
and ecx, 01h ;处理奇数
jecxz @F
lodsb
adc dl, al
结果完全正确,结贴给分啦。。。