2014-11-02 49 views
0

作爲練習,我在正在倒轉的應用程序中掛接一個函數。我試圖實施一種與蹦牀跳躍非常相似的技術。假設我們要掛鉤地址是srcMSVC內聯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)沒有任何問題。我不明白爲什麼。

回答

0

哈哈,事實證明我很困惑直接字節編輯與實際大會。只需編寫__asm JMP 0x420CB3就足夠了,彙編程序會照顧到這一點。