June 19, 2022 Hook 常用在调试或监控场景,比如 hook malloc/free 可以用来排查内存泄漏,hook OpenGL api 可以用来调试渲染效果等(如 RenderDoc),Android 常用的 native hook 主要有 PLT hook 和 inline hook 两类,PLT hook 通过修改动态库的 plt/got 表来替换链接的函数地址,inline hook 则是修改内存中的方法指令,实现相对复杂,这里介绍一种针对 OpenGL ES 函数的 hook 方法:TLS hook,实现简单并且稳定性&兼容性高。 TLS hook 基于 Android 系统 OpenGL ES 驱动加载逻辑来实现,我们先基于源码梳理下这部分的流程: 线程 TLS Android 在线程 TLS 中存储了一些基础数据,其结构如下:bionic_tls.h struct bionic_tcb { void* raw_slots_storage[BIONIC_TLS_SLOTS]; }; 可以看看该结构体在Continue reading “Android Hook OpenGL ES (TLSHook)”