Systemtap이 프로브 목록에 표시되지만 프로브 포인트를 확인할 수 없습니다.

Systemtap이 프로브 목록에 표시되지만 프로브 포인트를 확인할 수 없습니다.

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의 문제라는 것을 깨달았습니다. 아래 패치를 적용했더니 해결되었습니다.

https://lkml.org/lkml/2015/4/23/605

관련 정보