[問題] API hooking
DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction,
unsigned char *lpBackup)
{
DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName);
BYTE ReplaceCode[6] = { 0xe9, 0x00, 0x00, 0x00, 0x00, 0xc3 };
ReadProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0);
DWORD dwCalc = ((DWORD)lpFunction - dwAddr - 5);
memcpy(&ReplaceCode[1], &dwCalc, 4);
WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, ReplaceCode, 6, 0);
return dwAddr;
}
以上是網路找來的一段程式
就自己理解的部分, replace code中的0xe9是jmp的opcode, 0xc3是ret
dwCalc看起來是要計算 目標函式 跟 要跳過去的函式 之間的距離以帶進jmp
但是不太確定後面為什麼要-5
請問jmp跳的距離是從下一個intruction開始算嗎? 想不到其他原因...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.0.65
推
02/21 18:37, , 1F
02/21 18:37, 1F
推
02/21 18:52, , 2F
02/21 18:52, 2F
→
02/21 23:23, , 3F
02/21 23:23, 3F