Archive for 九月, 2016

Hook Library Function

前些天在琢磨微信协程库(libco),对库里Hook Library Function相关内容比较感兴趣,自己寻找相关的资料手动实践了一遍,确实很有意思。

核心参考文档 – 点击这里

理解Hook

一般来说我们调用系统API过程是这样:

Program -> Library Function -> System Call

举个例子,如果我们遇见这样的需求:把项目中调用malloc和free的地方打印日志,用作系统调优或者其他。

会遇见2个难题:1、从libc中malloc、free实现处做修改,这样需要重新编译整个libc和项目;2、日志应该是程序级的,若实现了1,那么在该机器上其实使用libc的项目不是也被“修改”了。

所幸Hook技术一直存在,形如:

Program -> Hook -> Library Function -> System Call

这样我们可以在不修改libc源码的情况下满足需求,并且做到程序级的修改。或者比如像Libco一样,hook住socket相关的系统调用添加自己超时相关逻辑。

Read More →