我正在向遊戲中注入C++ DLL,並且想要將一個函數掛接到我自己的一些代碼中。由於DLL每次都映射到不同的位置,所以直接跳轉和調用會更容易。另外,因爲這是一個鉤子,我不想在返回該函數時更改堆棧或註冊表。 (char * asm =「\ x00」;) 如果你可以提供十六進制,這將爲我節省一些時間。在不使用相關性的情況下直接在ASM中調用/跳轉(x86)
我曾嘗試使用FF和EA進行調用和跳轉,但我想我只是不明白這些如何工作。當我使用它們時,我注意到我在手術中有一個冒號。
JMP FAR FWORD PTR DS:[00000000]
這不起作用,它仍然之後,我試圖用一個指針跳躍位置沒有工作。
這裏之前,我開始嘗試不同的方法,我用的是裝配:
01270000 50 PUSH EAX
01270001 57 PUSH EDI
01270002 E8 E9CC1BFF CALL fwound.0042CCF0
01270007 5F POP EDI
01270008 58 POP EAX
01270009 50 PUSH EAX //replacements
0127000A 8D4C24 7C LEA ECX,DWORD PTR SS:[ESP+7C] //
0127000E - E9 36D11BFF JMP fwound.0042D149
我使用奧利取得該塊,因此它知道在當時所需的相關跳躍/調用。
之後,Asm在內存中,然後我必須在函數中寫入兩個操作(已被替換)以跳轉到此位置。
那麼,我該如何修復我的Asm塊以使用直接跳轉和調用?