首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dlsym插入库

使用dlsym插入库
EN

Stack Overflow用户
提问于 2009-10-26 02:33:19
回答 3查看 831关注 0票数 2

我正在编写一个插入库来跟踪libc中一些库函数的使用情况,比如open()、close()、connect()等。它在大多数应用程序上都运行得很好。但是,当我在PHP中尝试它时,特别是使用PHP的MySQL模块时,没有跟踪到这个模块中对libc的任何函数调用(所以没有connect(),没有socket(),等等)。‘'strace’告诉我,系统调用了socket()、connect()等。在模块和libmysqlclient.so.16.0.0上运行'file‘时表示它们都是动态链接的。所以这不应该是静态链接造成的问题。可能的问题是什么?

我使用的是Fedora 11 64位版本。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2009-10-27 10:32:52

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

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

票数 2
EN

Stack Overflow用户

发布于 2009-10-26 02:35:39

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

票数 0
EN

Stack Overflow用户

发布于 2010-05-18 04:28:22

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

玩得开心..。ErnestoB

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1621654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档