patcher.asm

来自「window编程,非常的好」· 汇编 代码 · 共 74 行

ASM
74
字号
;@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
   DllMain:
    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
    MOV      EAX, TRUE
    RET      12

  ALIGN 4
  FirstTime    DWORD 1

  OrigValues   BYTE "X"
  WantedValues BYTE "u"
  PatchSize    EQU  SIZEOF OrigValues
  PatchRVA     EQU  103FH
;------------------------------------------------------------------
 BeginHooks      Patcher
 EndHooks
;------------------------------------------------------------------

END DllMain 

:TRANSLATE
@ECHO OFF
ML    /c /coff  /nologo Patcher.bat
LINK3 Patcher /nologo /DLL /EXPORT:Patcher,@1,NONAME /SUBSYSTEM:WINDOWS /MERGE:.idata=.text  /MERGE:.rdata=.text /SECTION:.text,WRE /IGNORE:4078,4086 /BASE:0X77100000
DEL   Patcher.obj
DEL   Patcher.exp
DEL   Patcher.lib

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?