我不确定如何捕获由不同应用程序动态加载的库{即:无论应用程序如何}。我正在尝试编写一个工具,其中我需要记录动态加载到系统中的库名称。我们有没有API可以做到这一点?
答案 0 :(得分:0)
当然,hack ld-linux(8)(和/或ld.so(8))在加载库时进行记录。
答案 1 :(得分:0)
您可以拦截对动态加载程序的调用,执行您的操作,然后将调用链接到真正的加载程序。
您可以使用以下命令发现装载机的位置:
$ objdump -s -j .interp /bin/ls
(/bin/ls
只是一个示例应用程序。)
其他选项是设置环境变量LD_DEBUG
和LD_DEBUG_OUTPUT
并解释在调试输出中写入的文本(有关详细信息,请参阅man ld.so
)。
另一个选择是定期读取/proc/*/maps
文件并解释那里的sahred文件。
答案 2 :(得分:0)
您还可以使用/proc伪文件系统。 (另见this)。使用/proc/1234/maps
等,您可以找到哪些文件是mmap
- ed ...
当然,你有LD_PRELOAD trick