tcpdump 似乎没有调用任何 libpcap 的导出函数

tcpdump 似乎没有调用任何 libpcap 的导出函数

深入tcpdump研究实现,我可以看到它实际上libpcap.so在用户空间中加载动态库。

但是,通过使用strace,我看不到对 libpcap 导出的任何函数的任何调用。

以上是 tcpdump 的预期行为吗?谢谢。

root@eve-ng02:~# tcpdump --help
tcpdump version 4.9.2
libpcap version 1.7.4
OpenSSL 1.0.2g  1 Mar 2016

编辑:根据我尝试过的收到的评论ltrace,但似乎也没有完成对动态库的调用。

root@eve-ng02:~# ltrace tcpdump -i lo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
    
^C--- SIGINT (Interrupt) ---

0 packets captured
126 packets received by filter
98 packets dropped by kernel
+++ exited (status 0) +++
root@eve-ng02:~# 

答案1

strace仅显示系统调用。ltrace是一个用于显示库调用的工具(请参阅系统调用和库调用的区别)。

如果您想同时查看系统调用和库调用,您可以-S添加ltrace(“显示系统调用以及库调用”

您还可以将 添加-k到您的strace(“每次系统调用后打印所跟踪进程的执行堆栈跟踪”)如果您的strace版本支持它。它不会显示所有的库调用,但会显示每个系统调用的执行跟踪,您可以在其中看到哪个库触发了系统调用。

17212 eventfd2(0, EFD_NONBLOCK)         = 3
 > /lib64/libc-2.31.so(eventfd+0x7) [0x117b87]
 > /usr/lib64/libpcap.so.1.10.1() [0xb8fa]
 > /usr/lib64/libpcap.so.1.10.1(pcap_create+0xaa) [0x10a9a]
 > /usr/sbin/tcpdump() [0x3efbf]
 > /usr/sbin/tcpdump() [0x3c891]
 > /lib64/libc-2.31.so(__libc_start_main+0xee) [0x3524c]
 > /usr/sbin/tcpdump() [0x3e149]
17212 socket(AF_PACKET, SOCK_DGRAM, htons(0 /* ETH_P_??? */)) = 4
 > /lib64/libc-2.31.so(__socket+0x7) [0x1190d7]
 > /usr/lib64/libpcap.so.1.10.1() [0xa0c0]
 > /usr/lib64/libpcap.so.1.10.1(pcap_activate+0x1c) [0x1191c]
 > /usr/sbin/tcpdump() [0x3f0d2]
 > /usr/sbin/tcpdump() [0x3c891]
 > /lib64/libc-2.31.so(__libc_start_main+0xee) [0x3524c]
 > /usr/sbin/tcpdump() [0x3e149]

相关内容