【发布时间】:2012-07-02 08:36:20
【问题描述】:
我想监控(调试)一个用 C 语言编写的 linux 动态库。
我想看看何时以及将哪些参数传递给它。
监控“X”的库被另一个动态库“Y”调用。
“X”和“Y”都出现在可执行文件“A”的 /proc/pid/maps 中。
使用 ltrace,在可执行文件上没有显示 lib X 或 Y。
可执行文件正在使用多个线程。
另外,当在 exec 上使用 ldd 命令时,它没有提及任何关于库 X 或 Y 的内容。
ldd Y,表示Y需要X。
在所有库上使用 ldd,项目中的执行人员没有提及需要 Y 的任何人。
然而 Y 似乎已加载到 exec 的 /proc/pid/maps 中。
我不确定我可以采取哪些步骤来调试 X 库,不胜感激。
【问题讨论】:
-
Y可能在运行时通过dlopen加载。 -
strace应该检测库文件加载。 -
@KerrekSB 我看到 ltrace 文档声明
Calls to dlopen()ed libraries will not be traced. -
strace与ltrace不同。您还可以使用gdb并在间接加载的库 X 的适当函数名称上放置断点 -
LD_PRELOAD诡计有用吗?
标签: gdb dynamic-linking ldd ltrace gdbinit