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.07k stars 316 forks source link

怎么使用so提供的非公开函数? #2

Closed oujunli closed 3 years ago

oujunli commented 3 years ago

目前看提供的API里面是需要有调用方触发,然后hook掉函数调用(比如hook malloc打印堆栈)。是否能够调用非公开的函数,比如需要实现调用libart.so里面的函数(比如art::Thread::DumpJavaStack),如何通过符号查找到函数并且调用,使用库提供的功能?

caikelun commented 3 years ago

@oujunli 你的问题和 PLT hook 本身没有什么关系。在 hook 后执行的 proxy 函数中可以调用任何函数,包括你说的“非公开函数”。

通过符号查找系统库的非公开函数,可以用其他的开源库,比如:

https://github.com/hexhacking/xDL https://github.com/hack0z/byopen

oujunli commented 3 years ago

好的,非常感谢回复,看bhook里面也有bh_dl的功能,这部分的功能与xDL和byopen是否提供了类似的功能?如果功能类似的化,这部分功能是否可以提供开放接口。谢谢!

caikelun commented 3 years ago

@oujunli bh_dl 中的函数不会作为 bhook 的对外接口开放。bh_dl 和 xDL 原理是一样的,功能上只是 xDL 的一个子集,因为 bhook 只需要从一个特定的 ELF(linker)中的特定 section(.symtab)里查找少量几个内部符号的地址就可以了,这部分逻辑作为“符号查找”的功能来说并不完整。

oujunli commented 3 years ago

@caikelun 明白了,非常感谢你的解答,谢谢!

caikelun commented 3 years ago

@oujunli 不客气。