跟着某位大佬的博客一步步看完了libco源码,本以为看到co_eventloop算是把源码看完了,但是没想到接着往下看,竟然还有一个hook机制,编程这么多年,还从未这么使用过,hook着实是编程里面的一个奇淫技巧。总之,多看优秀源码,对提高自己的编程水平大有裨益。下面一起来看看hook到底是什么东西。
1. hook机制是什么
hook机制本质上是一种函数的劫持技术,比如我们通常需要调用malloc函数来进行内存分配,那么能不能我们自己封装一个同名、同入参和同返回值的malloc函数来替代系统的malloc函数,在我们自己封装的malloc函数中实现一些特定的功能,而且也能回调系统的malloc,这就是hook机制。
系统提供给我们的dlopen、dlsym族函数可以用来操作动态链接库,比如我们要hook系统调用函数read,我们可以使用dlsym族函数获取hook前函数的地址,这样就可以在自己实现的read中回调原函数,并加上一些额外的逻辑,并且在运行是会调用我们的版本了。
通过hook机制,libco可以达到用户无感的情况下把同步的代码替换为异步,这也是腾讯工程师写出libco的目的。libco库里面提供了socket族函数的ho