网上有几篇关于Android inline hook的文章,这篇尤其不错,还有对应的示例代码。为了方便调试看结果,我将其改为gradle工程,代码见这里。你需要将其导入的AS中,然后就可以进行native debug来调试分析原理了。
在改动后的代码中,我的目标是hook住origin_log,然后在桩函数new_log中执行自己的逻辑,并能够调用原函数。
直接来分析最重要的几步:
LDR.W PC,[?]
addr_new_log
并将原指令保存起来,这样在调用origin_log的时候,直接就跳转到new_log中。
这三部关键位置完成,就完美的将桩插入到目标函数中了。