| 
TA的每日心情|  | 奋斗 2016-1-13 12:25
 | 
|---|
 签到天数: 3 天 [LV.2]偶尔看看I | 
 
| 最新修正:http://www.dllhook.com/post/12.html 
 
 复制代码<pre class="prettyprint lang-bsh">format MS64 COFF
;===================================================
;" X64 HOOK PiaoYun/P.Y.G "
;" www.chinapyg.com "
;" www.dllhook.com "
;" Fixed: 2016-10-08 "
;===================================================
public GetRcx
public JmpAddr
public PatchBYTE
public PatchWORD
public PatchDWORD
public PatchQWORD
public AddFun
; Fixed 增加一个获取Rcx函数
GetRcx:
    mov    rax, rcx
    retn
JmpAddr:
    xchg   rax, rcx
    jmp    rax
PatchBYTE:
    mov    rax, rcx
    mov    [rax], dl
    retn         
PatchWORD:
    mov    rax, rcx     
    mov    [rax], dx    
    retn
PatchDWORD:
    mov    rax, rcx    
    mov    [rax], edx  
    retn            
PatchQWORD:
    mov    rax, rcx  
    mov    [rax], rdx
    retn          
AddFun:
    mov    rax, rcx
    add    rax, rdx
    retn</pre>      
 
用FASM编译成obj,添加到VS2012即可~~~
测试代码:
#include <windows.h>
#include <stdio.h>
// 宏定义
#define EXTERNC extern "C"
#define VOIDSTD EXTERNC void __stdcall
#define INT64STD EXTERNC INT64 __stdcall
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 汇编函数声明
VOIDSTD  GetRcx();
VOIDSTD JmpAddr(INT64 addr);
VOIDSTD PatchBYTE(INT64 addr, byte data);
VOIDSTD PatchWORD(INT64 addr, WORD data);
VOIDSTD PatchDWORD(INT64 addr, DWORD data);
VOIDSTD PatchQWORD(INT64 addr, INT64 data);
INT64STD AddFun(INT64 a, INT64 b);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VOID JmpFun()
{
        MessageBox(NULL, TEXT("111"), TEXT("11111"), MB_OK);
}
VOID main()
{
        printf("%I64X\n", AddFun(0x111111111, 0x222222222));
        GetRcx(); // Fixed 2016-10-08
        JmpAddr((INT64)&JmpFun);
        system("pause");
}
 
 
 | 
 |