我正在尝试从 Systemtap 运行标准示例脚本之一。
procmod_watcher.stp 使用 kprobes 来监视 fork、exec 等。
但是当我尝试运行这个脚本时,我得到了一个错误。
semantic error: while resolving probe point: identifier 'kprobe' at /usr/share/systemtap/tapset/linux/nd_syscalls.stp:967:27
source: probe nd_syscall.execve = kprobe.function("do_execve")
果然:
stap -L 'kprobe.function("do_execve")'
什么都不返回。怎么会这样?
我正在使用 Ubuntu 已按照以下说明进行操作:
Systemtap on Ubuntu @sourceware
我还尝试编译我自己的内核并确保通过配置启用 Kprobes、debug_info 和所有其他必需项。
我犯了同样的错误。
我已经在 Fedora 上尝试过相同的脚本,它几乎是开箱即用的。但是我只有一个开启了fedora的虚拟机,并且想继续使用ubuntu一段时间。
我需要做什么才能在 ubuntu 的 systemtap 中启用 kprobes?
最佳答案
kprobe.function
探针依靠 systemtap 读取 System.map
函数列表文件。跑
stap -vv -L 'kprobe.function("do_execve")'
查看 stap 在哪里寻找该文件;它可能在提示“内核符号表......不可用”。安排放一个
System.map
符号链接(symbolic link),stap 应该找到它和 do_execve
在其中发挥作用。我们可以扩展 stap 的搜索路径,在其原始位置找到文件;欢迎指点。或者如果问题是权限,sudo chmod a+r /boot/System.map*
这是为了解决 https://wiki.ubuntu.com/Security/Features 中被误导的部分。 - 参见 https://sourceware.org/bugzilla/show_bug.cgi?id=15172
关于ubuntu - kprobes 在 Ubuntu 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196278/