2012-06-11 15 views
0

我正在尋找一種獲取函數調用編程地址的方法: KeyboardView的public abstract void onKey(int primaryCode,int [] keyCodes) 。 OnKeyboardActionListener接口。如何從進程中動態獲取函數調用的地址

這些函數的地址是靜態的嗎?即始終將其加載在相同的存儲器中。

我試圖從關鍵記錄器實現防篡改。

回答

0

你的問題根本沒有任何意義,因爲你是問如何採取函數指針的時候,其實,Java沒有函數指針相當於(你只能通過看動態調度中函數的引用一個東西)。

功能地址可能是靜態的或根本不存在,但是這對您來說都是透明的,因爲代碼在虛擬機中運行。如果你是在NDK級別詢問,你肯定可以在C中使用簡單的&來獲取函數的地址。但是,在Java級別這是不可能的。

但是,您不明確爲什麼這會幫助您防止鍵盤記錄器。

+0

通過在運行時獲取函數的地址並假設它始終是靜態的,如果地址返回的值小於假定的地址,則很可能出現函數調用受到威脅。 – user1416662

+0

但是,如果我的邏輯不正確,是否有任何其他方式以編程方式檢測當前進程是否正在鍵盤鎖?很高興知道。 – user1416662

+0

由於代碼在VM中運行,並且可能被解釋,所以該函數甚至不會在內存中存在!如果你能分辨出你是否被鍵盤鎖定,那麼這將不是一個非常好的鍵盤記錄器:-)。您似乎在混淆C和VM級別,所有Android程序都是用Java編寫的,此時您無法調查這些問題。但是,一般來說,檢測鍵盤記錄器是不可能的(一般來說,也不太普遍)。 –

相關問題