Kernel

Systemtap 無法解析探測點,儘管它顯示在探測列表中

  • September 12, 2019

我正在嘗試使用 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。我懷疑我在編譯時錯過了一些東西。

我意識到這是編譯核心時有關 gcc 的問題。我應用了下面的更新檔並修復了。

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

引用自:https://unix.stackexchange.com/questions/539761