iqiyi / xHook

🔥 A PLT hook library for Android native ELF.
Other
4.1k stars 762 forks source link

hook opengl es动态库 #61

Closed terieqin closed 4 years ago

terieqin commented 4 years ago

你好,我想要hook opengl es动态库来获取一些渲染的信息,动态库的地址是在/system/lib64/libGLESv3.so,hook代码是这样的:

void (*old_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);

void new_glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices)
{
    old_glDrawElements(mode, count, type, indices);
}

int ret = 110;
void native_register(JNIEnv* env, jobject obj) {
    ret = xhook_register(".*/libGLESv3\\.so$", "glDrawElements", (void *)(&new_glDrawElements), (void **)(&old_glDrawElements));
    xhook_refresh(0);    // 同步或一步处理。这里是同步处理。
}

但是得到的ret一直是零,无论我怎么修改正则表达式和函数名称。难道成功不成功都会返回零嘛?百思不得其解。我可以请教一下是哪一步出错了嘛?

terieqin commented 4 years ago

我查看/proc/self/maps文件,里面已经有了下面这几句话:

/system/lib64/libGLESv3.so75e02f7000-75e02fd000 --xp 00013000 fd:06 27282266
/system/lib64/libGLESv3.so75e02fd000-75e02fe000 rw-p 00019000 fd:06 27282266                       
/system/lib64/libGLESv3.so75e02fe000-75e02ff000 r--p 0001a000 fd:06 27282266                       
/system/lib64/libGLESv3.so75e02ff000-75e0306000 r--s 00000000 fd:06 27350136 

库看起来已经是加载进来了,库里面也有glDrawElements这个方法,函数的定义在这个地方:https://www.khronos.org/registry/OpenGL/api/GLES3/gl31.h

但是我还是hook失败了。