不久前,Facebook开源了一个c方法的替换库fishhook,我好奇的去研究了下。

只需要很简单的一个方法调用就可以实现替换。

rebind_symbols(
  (struct rebinding[2]){
      {"close", my_close, (void *)&orig_close},
      {"open", my_open, (void *)&orig_open}
    },
  2);

根据官方的解释是,

当我们去链接动态链接库的时候,我们替换了重定向表里面的函数指针,使其指向我们想要替换的方法,所以调用的时候,自然调用到我们替换的方法中去了。

说起来简单,但还需要了解很多的东西。