You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Systemtap探测mq_notify()调用的所有函数?

跟踪mq_notify调用链的实现方法

方法一:使用Systemtap

Systemtap是内核级跟踪工具,适合快速批量探针函数:

  1. 编写跟踪脚本(比如mq_trace.stp):
# 探针mq_notify入口,打印进程信息与调用栈
probe kernel.function("mq_notify") {
    printf("Enter mq_notify | PID: %d | Process: %s\n", pid(), execname())
    print_backtrace()
}

# 探针mq_notify调用的所有子函数(匹配mqueue.c下的内核函数)
probe kernel.function("*@ipc/mqueue.c") {
    if (caller() == kernel.function("mq_notify").addr) {
        printf("mq_notify calls: %s\n", probefunc())
    }
}

# 探针mq_notify返回,打印返回值
probe kernel.function("mq_notify").return {
    printf("Exit mq_notify | Return value: %d\n", $return)
}
  1. 运行脚本并触发漏洞利用:
    在终端执行sudo stap mq_trace.stp,同时在另一个终端运行你的漏洞利用程序,即可实时看到调用流。

方法二:使用内核自带ftrace(无需额外工具)

ftrace是内核内置的跟踪框架,轻量且无需安装:

  1. 挂载debugfs(若未挂载):
sudo mount -t debugfs none /sys/kernel/debug
  1. 配置ftrace跟踪规则:
cd /sys/kernel/debug/tracing
echo function > current_tracer          # 启用函数跟踪
echo mq_notify > set_graph_function     # 仅跟踪mq_notify的调用链
echo 1 > options/func_stack_trace       # 开启调用栈打印
  1. 启动并停止跟踪:
echo 1 > tracing_on    # 开始跟踪,此时运行漏洞利用程序
echo 0 > tracing_on    # 完成后停止跟踪
cat trace              # 查看完整调用链日志

方法三:使用GDB单步调试(适合精细跟踪)

如果需要逐行分析代码流,GDB是更灵活的选择:

  1. 启动GDB并加载漏洞利用程序:
gdb ./your_exploit_binary
  1. 设置断点并跟踪:
b mq_notify    # 在mq_notify函数入口下断点
r              # 运行程序,触发断点后停止
bt             # 查看当前调用栈
si             # 单步进入子函数,逐行跟踪调用路径
finish         # 执行完当前函数,返回上一层调用

内容的提问来源于stack exchange,提问作者Cyb3rCr0wCC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 12:12:35