bytedance / bhook

:fire: ByteHook is an Android PLT hook library which supports armeabi-v7a, arm64-v8a, x86 and x86_64.
https://github.com/bytedance/bhook/tree/main/doc#readme
MIT License
2.05k stars 315 forks source link

是否可以对.init_array中的调用进行hook #18

Closed yimun closed 7 months ago

yimun commented 2 years ago

从原理上来看,bhook执行的时机应该是在dlopen之后?现在有个需求是:dlopen里会执行.init和.init_array区块的代码,我需要hook一个在.init_array区块中执行的函数,从本地尝试来看hook是无效的,原因是dlopen阶段hook还未执行,是否有其他办法可以做到呢?

image

caikelun commented 2 years ago

@yimun 是的,目前执行hook的时机是dlopen完成之后,所以.init和.init_array中的逻辑在执行时还没有hook。我有空想想怎么提前一下hook时机,有什么好的建议和想法欢迎一起探讨哈~

yimun commented 2 years ago

@caikelun 感谢回复!这两天我尝试了一下,但没有找到比较好的方案。 原因是linker内部的dl_iterate_phdr和dlopen是有互斥锁的,而.init和.init_array调用是在dlopen内部,所以直到dlopen结束前是无法读取到elf的 😭

fh2002 commented 2 years ago

[](url)