运维开发网

gdb – 监控linux动态库

运维开发网 https://www.qedev.com 2020-06-07 11:03 出处:网络
我想监视(调试)用C编写的 linux动态库. 我想看看何时以及传递给它的参数. 监视“X”的库由另一个动态库“Y”调用.‘X和’Y’都出现在可执行文件’A’的/ proc / pid / maps中.
我想监视(调试)用C编写的 Linux动态库.

我想看看何时以及传递给它的参数.

监视“X”的库由另一个动态库“Y”调用.

‘X和’Y’都出现在可执行文件’A’的/ proc / pid / maps中.

使用ltrace,在可执行文件上没有显示lib X或Y.

可执行文件使用多个线程.

此外,在exec上使用ldd命令时,它没有提及有关libs X或Y的任何内容.

ldd Y,表明Y需要X.

在所有lib上使用ldd,项目中的高管没有提到任何需要Y的人.

然而,Y似乎被加载到执行官的/ proc / pid / maps中.

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

如果user756235可以在gdb下运行它,那么这是一种使用 this和 this的方法.唯一的问题是在共享库中创建一个完整的函数列表X:nm ./libX.so | grep“T”

然后创建.gdbinit(在我的例子中,我控制print_in_lib的args):

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时:

host: srv2-x64rh5-01, OS: Linux 2.6.18-238.el5>gdb -q Function

“print_in_lib” not defined. Breakpoint 1 (print_in_lib) pending.

warning: no loadable sections found in added symbol-file

system-supplied DSO at 0x2aaaaaaab000 thousands: 1 print_debug: 0

Breakpoint 1, print_in_lib (print_debug=0, index=0) at my_lib.cpp:7 7

if (print_debug) { print_debug = 0 index = 0

Breakpoint 1, print_in_lib (print_debug=0, index=1) at my_lib.cpp:7 7

if (print_debug) { print_debug = 0 index = 1

Breakpoint 1, print_in_lib (print_debug=0, index=2) at my_lib.cpp:7 7

if (print_debug) { print_debug = 0 index = 2

Breakpoint 1, print_in_lib (print_debug=0, index=3) at my_lib.cpp:7 7 if (print_debug) { print_debug = 0 index = 3

0

精彩评论

暂无评论...
验证码 换一张
取 消