Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用dlsym的库插入_Php_Mysql_Libc_Dlsym - Fatal编程技术网

Php 使用dlsym的库插入

Php 使用dlsym的库插入,php,mysql,libc,dlsym,Php,Mysql,Libc,Dlsym,我正在编写一个插入库来跟踪libc中某些库函数的使用情况,如open()、close()、connect()等。它通常在大多数应用程序上都能正常工作。但是,当我尝试使用PHP时,尤其是使用PHP的MySQL模块时,没有跟踪到该模块中对libc的函数调用(因此没有connect()、socket()等)strace’告诉我,系统调用socket()、connect()等。在模块和libmysqlclient.so.16.0.0上运行“file”表示它们都是动态链接的。所以它不应该是由静态链接引起的

我正在编写一个插入库来跟踪libc中某些库函数的使用情况,如open()、close()、connect()等。它通常在大多数应用程序上都能正常工作。但是,当我尝试使用PHP时,尤其是使用PHP的MySQL模块时,没有跟踪到该模块中对libc的函数调用(因此没有connect()、socket()等)strace’告诉我,系统调用socket()、connect()等。在模块和libmysqlclient.so.16.0.0上运行“file”表示它们都是动态链接的。所以它不应该是由静态链接引起的问题。有什么问题吗

我使用的是Fedora 11 64位版本


谢谢。

由于某种原因,库可能会直接调用系统调用。在这种情况下,您需要使用
strace
(或在您自己的程序中使用
ptrace()
)来跟踪此用法。

似乎它不是由静态链接引起的。事实上,PHP是动态链接到其他库的。问题在于PHP加载扩展的方式


PHP通过调用带有标志RTLD_LAZY的dlopen()加载扩展,这意味着只有在执行引用时才会解析符号。这绕过了LD_PRELOAD指定的插入。

我同意上面的答案,即这些库可能会绕过对libc中open()、write()等的调用。。换句话说,这些库可能直接使用汇编调用系统调用,而不使用libc接口。。尽管直接使用系统调用的应用程序并不常见,但也并非闻所未闻。。 如果是这样的话,那就是为什么在你的库插入实验中看不到任何截获。。然后有两种方法,一种是通过strace快速生成,另一种是更复杂的方法,用于构建内核模块,该模块将在内核级别拦截这些调用,并向正在构建的任何框架报告。
玩得高兴
ErnestoB

通过阅读mysql客户端库的源代码,它看起来像是在调用connect(),等等。