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]

관련 정보