canyie/pine

Hook 方法突然间不会被hook了

panzhi1 opened this issue · 15 comments

hook了surfaceTexture的updateTexImage方法,开始正常hook, 在频繁调用此方法后,一段时间后就无法hook了,看日志是voidBridge 这个方法不再被调用,日志也没有其他不正常信息。请问有没有办法定位到voidBridge不调用的原因吗?

看起来像是 jit 的问题。

只有在release下才会发生这种情况,debug下没有发生。日志里在突变失败的时候,没有任何信息变化

看起来像是 jit 的问题。

看起来像是 jit 的问题。
麻烦说下嘛?

看起来像是 jit 的问题。

麻烦能说具体点吗?

jit 把热点方法编译之后覆盖了啊

jit 把热点方法编译之后覆盖了啊

谢谢! 但为啥只在release出现,debug下不会出现?在hook不到之后,我又主动调用了这个方法,还是不会被hook到?

请问有没有办法解决呢?

debug 因为要给 debugger 加断点所以不会启用 jit。

解决方法就是 Pine.disableJitInline();

debug 因为要给 debugger 加断点所以不会启用 jit。

解决方法就是 Pine.disableJitInline();

感谢! 请问disableJitInline这个方法调用时机有要求吗?我调用返回false了

debug 因为要给 debugger 加断点所以不会启用 jit。
解决方法就是 Pine.disableJitInline();

感谢! 请问disableJitInline这个方法调用时机有要求吗?我调用返回false了

Unexpected inline_max_code_units value 4064260840 (offset 48). 看注释是因为设备厂商修改了偏移量导致失败了

那只能等修复了。

或者可以试试 LSPlant

那只能等修复了。

谢谢了

那只能等修复了。

大佬 没有办法指定对应函数不被Jit优化吗?

@panzhi1 应该已经处理过才对。

你要不还是试试 LSPlant

LSPlant

好的 我试下

在hook方法调用前加上try-catch就可以了