我想监视(调试)一个用 C 编写的 linux 动态库。
我想看看什么时候和什么参数传递给它。

监视“X”的库由另一个动态库“Y”调用。
“X”和“Y”都出现在可执行文件“A”的/proc/pid/maps 中。

使用 ltrace,在可执行文件上没有显示 lib X 或 Y。
可执行文件正在使用多个线程。

此外,当在 exec 上使用 ldd 命令时,它没有提到关于 libs X 或 Y 的任何内容。
ldd Y,表明 Y 需要 X。

在所有库上使用 ldd,项目中的 execs 没有提到任何需要 Y 的人。
然而 Y 似乎加载在 exec 的/proc/pid/maps 中。

我不确定我可以采取哪些步骤来调试 X 库,任何建议表示赞赏。

最佳答案

如果 user756235 可以在 gdb 下运行它,那么这是一种使用 thisthis 的方法。唯一的问题是在共享库 X 中制作完整的函数列表:nm ./libX.so | grep "T "
然后创建 .gdbinit (在我的情况下,我控制 print_in_lib 的参数):

host: srv2-x64rh5-01, OS: Linux 2.6.18-238.el5>more .gdbinit
file main
set pagination off
set logging file gdb.txt
set breakpoint pending on
set logging on
b print_in_lib
commands
info args
continue
end
r
set logging off
quit

当我运行 gdb 时:

关于gdb - 监控linux动态库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11290267/

10-11 23:09
查看更多