0
我正在尋找一種獲取函數調用編程地址的方法: KeyboardView的public abstract void onKey(int primaryCode,int [] keyCodes) 。 OnKeyboardActionListener接口。如何從進程中動態獲取函數調用的地址
這些函數的地址是靜態的嗎?即始終將其加載在相同的存儲器中。
我試圖從關鍵記錄器實現防篡改。
我正在尋找一種獲取函數調用編程地址的方法: KeyboardView的public abstract void onKey(int primaryCode,int [] keyCodes) 。 OnKeyboardActionListener接口。如何從進程中動態獲取函數調用的地址
這些函數的地址是靜態的嗎?即始終將其加載在相同的存儲器中。
我試圖從關鍵記錄器實現防篡改。
你的問題根本沒有任何意義,因爲你是問如何採取函數指針的時候,其實,Java沒有函數指針相當於(你只能通過看動態調度中函數的引用一個東西)。
功能地址可能是靜態的或根本不存在,但是這對您來說都是透明的,因爲代碼在虛擬機中運行。如果你是在NDK級別詢問,你肯定可以在C中使用簡單的&
來獲取函數的地址。但是,在Java級別這是不可能的。
但是,您不明確爲什麼這會幫助您防止鍵盤記錄器。
通過在運行時獲取函數的地址並假設它始終是靜態的,如果地址返回的值小於假定的地址,則很可能出現函數調用受到威脅。 – user1416662
但是,如果我的邏輯不正確,是否有任何其他方式以編程方式檢測當前進程是否正在鍵盤鎖?很高興知道。 – user1416662
由於代碼在VM中運行,並且可能被解釋,所以該函數甚至不會在內存中存在!如果你能分辨出你是否被鍵盤鎖定,那麼這將不是一個非常好的鍵盤記錄器:-)。您似乎在混淆C和VM級別,所有Android程序都是用Java編寫的,此時您無法調查這些問題。但是,一般來說,檢測鍵盤記錄器是不可能的(一般來說,也不太普遍)。 –