📄 patcher1.asm
字号:
;@GOTO TRANSLATE
.586P
.MODEL FLAT, STDCALL
OPTION CASEMAP: NONE
INCLUDE WINDOWS.inc
UNICODE = FALSE
INCLUDE APIMACRO.mac
INCLUDE ApiHooks.inc
INCLUDELIB iKERNEL32.lib
INCLUDELIB iUSER32.lib
;------------------------------------------------------------------
.CODE
New_wsprintfA:
PUSHp ESI, EDI
DEC FirstTime ;work one time only
JL @F
iWin32i GetModuleHandle, NULL
TEST EAX, EAX
JE @F
MOV EDI, EAX
ADD EDI, PatchRVA
PUSH ECX
iWin32 VirtualProtect, EDI, PatchSize, PAGE_READWRITE, ESP
TEST EAX, EAX
POP EDX
JE @F
PUSHp EDI, EDI
MOV ESI, OFFSET OrigValues
MOV ECX, PatchSize
REPE CMPSB
POP EDI
JNE ReturnPg
MOV ESI, OFFSET WantedValues
MOV ECX, PatchSize
REP MOVSB
ReturnPg:
POP EDI
PUSH EAX
iWin32 VirtualProtect, EDI, PatchSize, EDX, ESP
POP EAX
@@:
POPc ESI, EDI
iWin32j wsprintfA
ALIGN 4
FirstTime DWORD 1
OrigValues LABEL BYTE
PUSH MB_OK
WantedValues LABEL BYTE
PUSH MB_YESNO OR MB_ICONQUESTION
PatchSize EQU $-WantedValues
PatchRVA EQU 1081H
TEXTA USER32, <USER32.dll/0>
TEXTA _wsprintfA, <wsprintfA/0> ;_ added for avoiding conflicts with WINDOWS.inc
;------------------------------------------------------------------
BeginHooks Patcher1
MkHook ,USER32, _wsprintfA, HOOK_IMPORT, NULL
EndHooks
;------------------------------------------------------------------
END
:TRANSLATE
@ECHO OFF
ML /c /coff /nologo Patcher1.bat
LINK3 Patcher1 /nologo /DLL /NOENTRY /EXPORT:Patcher1,@1,NONAME /SUBSYSTEM:WINDOWS /MERGE:.idata=.text /MERGE:.rdata=.text /SECTION:.text,WRE /IGNORE:4108,4078,4086 /BASE:0X77200000
DEL Patcher1.obj
DEL Patcher1.exp
DEL Patcher1.lib
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -