Skip to content

libc 拦截的实现

Mingliang Tan edited this page Feb 15, 2019 · 1 revision

对于 mac 和 linux 上的实现是不同的。使用了第三方的开源 https://github.com/ccurtsinger/interpose 实现了同一套代码。

录制只发生在 linux 上。所以 mac 版本的 libc 拦截仅仅用于流量回放。

因为这种拦截是非常通用的技术,看别人写的博客就好了

https://github.com/ccurtsinger/interpose 的 INTERPOSE 宏看起来很美观。本质上就是拿 C++ 11 的高级语法做了一把源代码生成而已。如果不用这个库,拿 php 写一个 c 源代码生成,也是一样的效果。所谓现代 c++,就是各种语法上的奇技淫巧,做一些源代码生成的工作。

mac 上有一点需要注意是因为 10.11 开始 SIP 保护,对于 /usr/bin 下 binary 是无法拦截的(参见 https://github.com/wolfcw/libfaketime/blob/master/README.OSX)。好在 brew install 出来的 php 是在 /usr/local/bin 下,所以并不会受到这个限制。