64位系统InlineHook

Posted BiaoGe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了64位系统InlineHook相关的知识,希望对你有一定的参考价值。

APIHook64Class.h

 1 #ifndef APIHOOK64CLASS_H_
 2 #define APIHOOK64CLASS_H_
 3 #include <Windows.h>
 4 
 5 class APIHook64
 6 {
 7 private:
 8     unsigned char code[12];
 9     unsigned char oldcode[12];
10     FARPROC addr;
11 
12 public:
13     APIHook64();
14     BOOL Hook(char *dllName,char *apiName,long long callfunc,BOOL bHook=TRUE);
15 };
16 
17 #endif

 

APIHook64Class.cpp

 1 #include "APIHook64Class.h"
 2 
 3 APIHook64::APIHook64()
 4 {
 5     /*
 6         mov eax,0x12345678
 7         push eax
 8         ret
 9     */
10     unsigned char c[12] = { 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xC3 };
11     RtlMoveMemory(APIHook64::code, c, 12);
12     memset(APIHook64::oldcode, 0, 12);
13     addr = NULL;
14 }
15 
16 BOOL APIHook64::Hook(char *dllName, char *apiName, long long callfunc, BOOL bHook)
17 {
18     BOOL bOk = FALSE;
19     DWORD dwOldProtect = 0;
20     long long api = callfunc;
21     HANDLE hPro = GetCurrentProcess();
22 
23     if (!APIHook64::oldcode[0])
24     {
25         addr = GetProcAddress(LoadLibrary(dllName), apiName);
26         RtlMoveMemory(APIHook64::code+2, &api, 8);
27         if (VirtualProtectEx(hPro, addr, 12, PAGE_EXECUTE_READWRITE, &dwOldProtect))
28         {
29             RtlMoveMemory(APIHook64::oldcode, addr, 12);
30         }
31     }
32     if (bHook)
33     {
34         bOk = WriteProcessMemory(hPro, addr, APIHook64::code, 12, NULL);
35     }
36     else {
37         bOk = WriteProcessMemory(hPro, addr, APIHook64::oldcode, 12, NULL);
38     }
39     VirtualProtectEx(hPro, addr, 12, dwOldProtect, &dwOldProtect);
40     CloseHandle(hPro);
41     return bOk;
42 }

 

以上是关于64位系统InlineHook的主要内容,如果未能解决你的问题,请参考以下文章

从顶点到片段着色器的平滑 64 位输入 - “错误 C7570:64 位输入应该是平坦的”

2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。(代码片段

Java itext为pdf 文件添加水印核心功能代码片段

使用 g++ -march=x86-64 构建的代码可以在 32 位操作系统上运行吗?

InlineHook

32位系统与64位系统