- UID
- 26066
注册时间2006-10-6
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 开心 2016-4-11 20:07 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
发表于 2007-4-24 20:19:14
|
显示全部楼层
<pre>.586
.model flat,stdcall
</pre>
<pre>include windows.inc
include kernel32.inc
include user32.inc
</pre>
<pre>includelib kernel32.lib
includelib user32.lib</pre>
<pre>.data
szMsgTitle db '文件补丁示例',0
lFileSize dd 16384 ;文件大小
lFileOffset dd 1920h ;需要补丁的偏移地址
lChanges dd 6h ;需要修补的字节数
BytesToWrite db 0E9h, 0EFh, 00h, 00h, 00h, 90h ;补丁数据
lBytesWriten dd 0 ;写进文件的字节数
hFile dd 0 ;文件句柄
szFileName db 'patch_test.exe',0 ;文件名
szOK db '补丁成功 :)',0
szErrCreate db '不能打开文件',13,10
db '检查文件路径和文件名再试一次!',13,10
szErrFileSize db '文件大小不符',13,10
szErrFilePtr db '不能设置文件指针',13,10,0
szErrWriteFile db '文件不可写',13,10,0</pre>
<pre>.code
start:
;--------------------------------------------
;打开文件
invoke CreateFile,offset szFileName,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
cmp eax,-1 ;发现文件?
mov ebx,offset szErrCreate
jz error_create
mov hFile,eax ;保存文件句柄
</pre>
<pre>;---------------------------------------------
;检查文件尺寸
invoke GetFileSize,eax,NULL
cmp eax,lFileSize
mov ebx,offset szErrFileSize
jnz error
;---------------------------------------------
;在文件内设置指针偏移
invoke SetFilePointer,hFile,lFileOffset,NULL,FILE_BEGIN
cmp eax,-1
mov ebx,offset szErrFilePtr
jz error
;---------------------------------------------
;写数据到文件
invoke WriteFile,hFile,offset BytesToWrite,lChanges,offset lBytesWriten,NULL
test eax,eax
mov ebx,offset szErrWriteFile
jz error
mov ebx,offset szOK
</pre>
<pre>error:
invoke CloseHandle,hFile ;关闭文件</pre>
<pre>error_create:
invoke MessageBox,NULL,ebx,offset szMsgTitle,MB_OK+MB_ICONINFORMATION
invoke ExitProcess,NULL ;退出
end start</pre> |
|