在项目中有个功能是获取FPS,用到了root注入来获取FPS,这个方法是通过计算eglSwapBuffers调用次数来统计的,那目的就简单了,直接注入替换eglSwapBuffers,再在新的函数统计并调用原始的eglSwapBuffers即可.看起来挺简单的事情,放到实际情况中却又是另外一回事了.第一个问题是在刷了ColorOS的小米机器上遇到的.问题简单描述就是:通过shell手动执行二进制文件注入成功,通过java代码执行命令,注入失败.原因是通过java代码执行,在注入的时候找到的mmap偏移地址不对.导致计算远程mmap地址不正确,而无法继续.通过各种测试,最后问题得到解决.以前的代码是直接使用函数地址:1mmap_addr=get_remote_addr(target_pid,libc_path,(uint32_t)mmap);修改后的代码则从so中查找函数地址:12345void*handle=dlopen(libc_path,RTLD_LAZY);void*local_mmap=dlsym(handle,"mmap");dlclose(handle);mmap_addr=get_remote_addr(target_pid,libc_path,(uint32_t)local_mmap);第二个问题,则发生在三星系列手机上,注入正常,eglSwap
...
继续阅读
(33)