RING 3 inlinehook 一个小问题
inlinehook类
#ifndef INLINEHOOK_SB#define INLINEHOOK_SB#include <windows.h>class inlinehook{private: BYTE NewB[8]; BYTE OldB[8]; FARPROC OldFuncAddr;public: inlinehook(void); virtual ~inlinehook(void);public: int StartHook(void); int StopHook(void); void Initialize(DWORD Old,DWORD New);};inlinehook::inlinehook(void){ NewB[0]=0xB8; NewB[1]=0x00; NewB[2]=0x00; NewB[3]=0x40; NewB[4]=0x00; NewB[5]=0xFF; NewB[6]=0xE0; NewB[7]=0x00;}inlinehook::~inlinehook(void){ WriteProcessMemory(INVALID_HANDLE_VALUE,(void*)OldFuncAddr,OldB,8,NULL);}void inlinehook::Initialize(DWORD Old,DWORD New){ OldFuncAddr = (FARPROC)Old; ReadProcessMemory(INVALID_HANDLE_VALUE,(void*)OldFuncAddr,OldB,8,NULL); *(DWORD*)(NewB+1) = New;}int inlinehook::StartHook(){ if(!WriteProcessMemory(INVALID_HANDLE_VALUE,(void*)OldFuncAddr,NewB,8,NULL)) return -1; else return 0;}int inlinehook::StopHook(){ if(!WriteProcessMemory(INVALID_HANDLE_VALUE,OldFuncAddr,OldB,8,NULL)) return -1; else return 0;}#endif