不久前,Facebook开源了一个c方法的替换库fishhook,我好奇的去研究了下。
只需要很简单的一个方法调用就可以实现替换。
rebind_symbols(
(struct rebinding[2]){
{"close", my_close, (void *)&orig_close},
{"open", my_open, (void *)&orig_open}
},
2);
根据官方的解释是,
当我们去链接动态链接库的时候,我们替换了重定向表里面的函数指针,使其指向我们想要替换的方法,所以调用的时候,自然调用到我们替换的方法中去了。
说起来简单,但还需要了解很多的东西。