簡體   English   中英

掛鈎非虛擬類成員函數

[英]Hooking non-virtual class member function

我設法鈎住了我想要的所有內容(API函數,虛擬方法,“標准”函數),但我想知道如何鈎住非虛擬類成員函數(方法)。 要掛接一個虛擬方法,您只需要獲取VTable並對其打補丁(或復制它,對其進行修改並更改VPointer)。 但是,如果該方法不是virtual ,則沒有VTable。

首先,如何從名稱中獲取要掛接的方法的地址 由於該函數未導出,因此無法使用GetProcAddress() 唯一的方法似乎是在內存中搜索與該功能相對應的字節模式。 然后,一旦我獲得了地址,該如何鈎住它? 使用基本方法(JMP)? 如果我只想掛接一個實例怎么辦? 我想我應該檢查一下我的鈎子函數:如果是正確的實例,那么就必須做些什么,否則就執行它而不做其他事情。

實際上,我正在尋找更好的解決方案,因為我認為上面的解決方案可以工作,但它們不是很“整潔”,是嗎?

謝謝。

在大多數情況下,根本不可能轉移靜態解析函數。 您是否聽說過稱為內聯的優化? 即使沒有發生這種情況,COMDAT折疊也可能使您無法隔離感興趣的功能。

強烈建議閱讀: Raymond Chen的“調試器為什么會顯示錯誤的功能?”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM