我想知道:使用LD_PRELOAD,我可以覆盖并拦截用C / C ++编写的函数。 是否有可能拦截用MySQL源代码编写的函数?
例如,我想要一个日志文件,以包含所有MySQL连接(出于审计原因)。 我会拦截 mysql_real_connect() C函数是MySQL源码,方法如下: LD_PRELOAD = my_intercepting_connect.so mysql
它(理论上)会起作用吗?有没有人这样做过,或类似的?
答案 0 :(得分:3)
使用LD_PRELOAD,您可以拦截应用程序从共享库中提取的任何符号。您无法拦截不会跨越二进制边框的函数调用。因此,当您的应用程序动态链接到mysql时,您可以拦截mysql_real_connect
调用,当应用程序静态链接时,您运气不好。你也不能拦截mysql lib中的调用。