2011-02-05 52 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中的調用。