以下是我引用的一篇文章
PE CheckSum生成代码
作者:陆麟
转载请征得作者同意.
2002.9.13
--------------------------------------------------------------------------------
一段时间来一直很忙, 期间遇到公司变故, 工作更换, 很久没用更新主页. 今天再度开始.
PE文件中有个字段叫CHECK SUM. 用于检验PE文件的完整性. NT启动时的会检验文件的CHECKSUM, 以确保加载的文件是完整的文件而不是破损的文件.
在开发EXE/DLL时, 一般情况下生成CHECK SUM需要在LINK时加/RELEASE. 这样, CHECK SUM就被加入PE文件中. 否则,CHECK SUM为0. LINK不生成CHECK SUM. 如果需要写个修改PE的文件, 又涉及修改CHECKSUM, 那么通常的做法是调用IMAGEHLP.DLL的CheckSumMappedFile函数来获得.
在比较个别情况下, 并没用条件使用IMAGEHLP.DLL, 嘿嘿, 这种状况可不是谁都能碰到的.
那下面的代码就有用了.
汇编原型:
CheckSumFile PROTO ,
WORD,
WORD
实现:
CheckSumFile PROC USES esi ecx edx lpFile
WORD, dwFileLen
WORD
xor edx, edx
mov esi, lpFile
mov ecx, dwFileLen
shr ecx, 1
@CSumLoop:
movzx eax, word ptr [esi]
add edx, eax
mov eax, edx
and edx, 0ffffh
shr eax, 10h
add edx, eax
add esi, 2
loop @CSumLoop
mov eax, edx
shr eax, 10h
add ax, dx
add eax, dwFileLen
ret
CheckSumFile ENDP