在我的项目中,我正在实现一个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