【问题标题】:kprobes not working in Ubuntukprobes 在 Ubuntu 中不起作用
【发布时间】:2014-06-05 10:50:26
【问题描述】:

我正在尝试从 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?

【问题讨论】:

    标签: ubuntu ubuntu-13.10 systemtap


    【解决方案1】:

    kprobe.function 探测器依靠 systemtap 读取 System.map 文件以获取函数列表。运行

    stap -vv -L 'kprobe.function("do_execve")'
    

    查看 stap 在哪里寻找该文件;它可能在抱怨“内核符号表......不可用”。安排在那里放置一个 System.map 符号链接,然后 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

    【讨论】:

    • 这完全正确,我得到:内核符号表/lib/modules/3.11.0-15-generic/build/System.map不可用,(没有这样的文件或目录)内核符号表/ boot/System.map-3.11.0-15-generic 不可用,(权限被拒绝)我现在正在检查修改后的权限如何。
    • 是的,只需更改权限即可解决问题。
    【解决方案2】:

    除了@fche 的回答,SystemTap 正在/lib/modules/$(uname -r)/build/System.map 中寻找 System.map。

    在 Ubuntu 中,system.map 放在/boot/System.map-$(uname -r) 所以:

    1. 您需要以 sudo 身份运行 stap(因为只有 root 才能访问 /boot 或执行某些组魔法)
    2. 创建指向 System.map 的软链接:sudo ln -s /boot/System.map-$(uname -r) /lib/modules/$(uname -r)/build/System.map

    我不建议更改任何位置、安全性和所有文件的读取标志...

    【讨论】:

      猜你喜欢
      • 2017-04-05
      • 2023-03-12
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 2013-10-12
      相关资源
      最近更新 更多