systemtap을 사용하여 netfilter synproxy 모듈을 디버깅하려고 합니다.
이것이 제가 추가하려는 프로브 포인트입니다.
# stap -l 'module("ipt_SYNPROXY").statement("*")' | grep send_client_synack
module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72")
이것이 stap 스크립트의 모습입니다
probe module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72"){
//some code
}
실행하려고 하면 다음 오류가 발생합니다.
semantic error: no line records for net/ipv4/netfilter/ipt_SYNPROXY.c:72 [man error::dwarf]
semantic error: resolution failed in DWARF builder
semantic error: while resolving probe point: identifier 'module' at netfilter.stp:915:7
source: probe module("ipt_SYNPROXY").statement("synproxy_send_client_synack@net/ipv4/netfilter/ipt_SYNPROXY.c:72"){
^
semantic error: no match
다른 프로브 포인트를 몇 개 시도했는데 모든 프로브 포인트가 이 오류를 발생시키는 것은 아니라는 것을 깨달았습니다. 예를 들어 다음 프로브는 정상적으로 작동합니다.
probe module("ipt_SYNPROXY").statement("ipv4_synproxy_hook@net/ipv4/netfilter/ipt_SYNPROXY.c:314"){
//some code
}
제가 직접 컴파일한 커널 버전은 4.14.128입니다. 컴파일할 때 뭔가 빠진 것이 있는 것 같습니다.
답변1
커널을 컴파일할 때 이것이 gcc의 문제라는 것을 깨달았습니다. 아래 패치를 적용했더니 해결되었습니다.