看板 C_and_CPP 關於我們 聯絡資訊
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
vizshala:你去看一下jmp真正的意思就知道了 02/21 18:37
firose:E9XXXX = 目標位址 - call的下一個指令的位址 02/21 18:52
WPC001:要先扣掉jmp指令的長度喔... 剛好在你這邊就是5 02/21 23:23