在我的項目中,我正在實現一個JNI代理,它將在我的自定義「.c」文件中將所有java原生方法重新綁定到我的自定義方法中。因此,由於JNI代理在運行時綁定本地方法,因此我只會談論運行時解決方案。C獲取函數地址
當JNI結合本地方法,下面的函數被調用:
void JNICALL NativeMethodBind(jvmtiEnv *jvmti_env,
JNIEnv* jni_env,
jthread thread,
jmethodID method,
void* address,
void** new_address_ptr)
此時Java方法獲取綁定,除非你把東西放到void** new_address_ptr
解決void* address
。因此,爲了重新綁定窗簾方法,我只需要覆蓋new_address_ptr
- 變量。
現在,我想重新將函數重新綁定到包含數百種不同方法的自定義.c文件中的函數地址。這就是我卡住的地方。雖然具有.c文件和函數的字符串名稱,但我如何獲取我的.c文件中相應函數的地址?
我運行windows64機器上的項目用gcc 4.9.1
您有* * .c'文件中存在的函數的字符串名稱有多大可能? – Gaurav
@GauravPathak @GauravPathak很有可能,就像它是100%肯定有... –
在c代碼中,函數名稱也是它的地址,在程序集中添加「_」作爲前綴。 – sdao