tcpdumpがlibpcapのエクスポートされた関数を呼び出さないようです。

tcpdumpがlibpcapのエクスポートされた関数を呼び出さないようです。

実装をより詳しく見ると、実際にユーザースペースに動的ライブラリをロードするtcpdumpことがわかります。libpcap.so

ただし、libpcapを使用すると、stracelibpcapからエクスポートされた関数への呼び出しは表示されません。

上記の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「システムコールとライブラリコールの表示」)

-kstrace「各システム呼び出し後に追跡されたプロセスの実行スタックトレースを印刷します。」)あなたの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]

関連情報