2011-02-05 81 views
0

我想知道:用LD_PRELOAD,我可以覆盖,并拦截用C/C++编写的函数。 是否有可能拦截用MySQL源代码编写的函数?LD_PRELOAD与MySQL

例如,我想要一个日志文件,以包含所有MySQL连接(出于审计原因)。 我会拦截mysql_real_connect() C函数是MySQL源代码,通过以下方式: LD_PRELOAD = my_intercepting_connect.so mysql的

将它(理论上)工作?有没有人做过这个或类似的事情?

回答

3

使用LD_PRELOAD,您可以拦截应用程序从共享的库中截取的任何符号。你不能拦截没有跨越二进制边界的函数调用。所以当你的应用程序动态链接到mysql时,你可以拦截mysql_real_connect调用,当应用程序静态链接时,你运气不好。你也不能拦截mysql lib中的调用。