我正在尝试使用 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