0
作爲練習,我在正在倒轉的應用程序中掛接一個函數。我試圖實施一種與蹦牀跳躍非常相似的技術。假設我們要掛鉤地址是src
:MSVC內聯asm中的相對接近跳轉(需要掛鉤)
- 在
src
更換5個字節用JMP myFunc的 - 在myFunc的 之初
- 做複製丟失(覆蓋)5個字節的功能我自己的東西
- JMP回我在與做的最後一件事麻煩
src
+5
- 控制返回src
+5。在我的情況下,地址(src
)爲0x420CAE
,這是我在做什麼:
//virtual protect stuff
*(BYTE*)0x0420CAE = 0xE9;
*(DWORD*)(0x0420CAE + 1) = ((DWORD)Hooked - (DWORD)0x0420CAE - 5);
//restore protect
也能正常工作,控制傳遞給我的函數(Hooked
)。這是什麼樣子:
void __declspec(naked) Hooked()
{
__asm{
LEA EAX, [ESP+0x1C]
PUSH EBP
}//stolen bytes
__asm PUSHAD ;in case puts messes up some registers
puts("i'm inside.");
__asm POPAD
__asm JMP (0x420CB3 - $ - 5)
}
至於最後的指令 - 我認爲這是它應該是什麼:我想跳到0x420CB3,所以我減去當前的地址,然後5(大小JMP)。 MSVC,然而,抱怨:
Error 1 error C2425: '-' : non-constant expression in 'first operand'
如果我,但是,這樣做在相反的順序($ - 0x420CB3)沒有任何問題。我不明白爲什麼。