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
用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"); }
发表评论