如何捕获全系统加载的库?

时间:2012-02-13 15:52:09

标签: c linux

我不确定如何捕获由不同应用程序动态加载的库{即:无论应用程序如何}。我正在尝试编写一个工具,其中我需要记录动态加载到系统中的库名称。我们有没有API可以做到这一点?

3 个答案:

答案 0 :(得分:0)

当然,hack ld-linux(8)(和/或ld.so(8))在加载库时进行记录。

答案 1 :(得分:0)

您可以拦截对动态加载程序的调用,执行您的操作,然后将调用链接到真正的加载程序。

您可以使用以下命令发现装载机的位置:

$ objdump -s -j .interp /bin/ls

/bin/ls只是一个示例应用程序。)

其他选项是设置环境变量LD_DEBUGLD_DEBUG_OUTPUT并解释在调试输出中写入的文本(有关详细信息,请参阅man ld.so)。

另一个选择是定期读取/proc/*/maps文件并解释那里的sahred文件。

答案 2 :(得分:0)

您还可以使用/proc伪文件系统。 (另见this)。使用/proc/1234/maps等,您可以找到哪些文件是mmap - ed ...

当然,你有LD_PRELOAD trick