问题标签 [kprobe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
343 浏览

kernel - sys/kernel/debug/krpobes/list 为空

为了工具的目的,我正在尝试附加到 kprobe 事件,但我对 kprobe 事件不太熟悉。我读过注册的 kprobes 列表可用,/sys/kernel/debug/kprobes/list但是sudo less /sys/kernel/debug/krpobes/list显示没有注册的 kprobes。我已经确认 krpobes/enabled 是 1。我做错了什么吗?

0 投票
2 回答
1059 浏览

trace - 将 bpf 附加到 sys_enter(可通过 /proc/kallsyms 获得跟踪点)

我正在尝试构建一个工具,其中我将 BPF 程序附加到所有系统调用的入口点。在 CLI 中,我能够通过附加到所有系统调用条目

这很棒,但我想做更复杂的事情。我发现我可以使用 python 的前端将 BPF 程序附加到 kprobe 事件中——

但是,在 attach_kprobe 行中,我想附加到所有系统调用条目而不是 sys_clone。但是,我没有找到任何 sys_enter 跟踪点,/sys/kernel/debug/tracing/available_filter_functions但我在/proc/kallsyms. 但是,当我尝试用 __tracepoint_sys_enter 替换 __x64_sys_clone 时,我得到一个无效的参数错误。我想知道,我可以使用 kprobes 附加到所有系统调用条目(并最终退出)吗?还是我需要使用不同的跟踪机制。谢谢!

0 投票
1 回答
144 浏览

linux - 如何将 /kernel/sched/* 包含到 BPF 程序中?

根据 BPF Performance Tools 一书,我正在尝试在 Linux 中使用 bpftrace 制作一个自定义 bpf 程序。我试图从路径 linux/kernel/sched/sched.h 中包含一些文件。我怎样才能包括它们?(不仅是 /include 文件夹,还来自 Linux 中的 linux/kernel/* 文件夹?)

我正在尝试合并#include /kernel/sched/sched.h 以使用“struct rq”。

我的程序示例是:

0 投票
1 回答
164 浏览

ebpf - eBPF 工具 - skb_network_header 在 BPF 内核跟踪函数中崩溃

我正在寻找追踪ip_forward_finish。目的是跟踪通过基于 linux 的网关路由器的所有 TCP 连接的延迟。因此想到了跟踪ip_forward_finish核函数。并在路由器上捕获SYN,SYN-ACK和消息的时间戳。ACK

问题是iphdr在跟踪函数内部访问使验证者抱怨以下错误:

我最初拥有的代码片段如下,当访问时发生崩溃ip_Hdr->protocol。而且我还检查了ip_Hdr它不为空。

根据消息中的提示,我确实尝试更改为bpf_probe_read但结果仍然相同

任何帮助,将不胜感激。

0 投票
1 回答
146 浏览

sockets - 可以从 Linux 内核数据类型“struct sock”中检索套接字的端口吗?

动机

我正在尝试编写一个 bpftrace 程序,以通过挂钩 kprobe 来跟踪套接字何时准备好读取sock_def_readable。我会得到一个struct sock检查。我想将它映射回我在用户区创建的套接字。

问题

如何从 a 中恢复端口号struct sock

0 投票
0 回答
129 浏览

linux - 我正在尝试在自定义 BPF 程序中探索 tcp_synack_timer 的功能,例如 BPF Performance Tools 一书

我想使用上述功能,因为我想使用 struct request_sock_queue 和 struct listen_sock 。有没有办法使用它们(也许是不同的功能)?

首先,我尝试制作一个使用 'tcp_synack_timer'(net/ipv4/tcp_timer.h) 的 BPF 程序转到另一个函数-> 'int_csk_reqsk_queue_prune'(net/ipv4/inet_connection_sock.c),这些都不起作用(我也搜索了这些/sys/kernel/debug/tracing/available_filtered_functions 中的函数来获取'struct listen_sock',然后我最终得到'qlen'(struct listen_sock,它位于'include/net/request_sock.h'中。

以及我尝试的另一个功能:

0 投票
2 回答
164 浏览

linux - 与网络相关的 kprobe 在实践中有多不稳定?

我对 BPF 开发领域非常陌生,需要在我的 BPF 程序中使用 kprobes,以便我可以正确检测和收集尝试通过网络发送数据包的进程的 PID。我想用我的用户空间应用程序部署这个 BPF 程序,我的用户空间应用程序在各种 linux 版本和发行版上运行——尽管都是相对较新的。

我知道 kprobe 机制并不是官方稳定的,但是我的程序在实践中出现故障的可能性有多大?我正在挂钩tcp_connectip4_datagram_connect. 我原以为这些功能在内核版本之间不会有太大变化,所以或多或少地依赖它们应该是安全的吗?还是我有什么误解?

我能否发布一个依赖于这些特定 (tcp/udp) kprobes 的应用程序,而不必过多担心兼容性或稳定性?

0 投票
0 回答
119 浏览

c - Linux uprobe 如何处理断点?

据我了解,在 x86 上,在用户指定的位置uprobe放置一条int3指令,并在遇到异常时处理该异常,kprobe在这方面有点类似。

我不明白的是,do_int3()执行处理程序如何告诉uprobe它何时被击中。相比之下, forkprobe有对kprobe_int3_handlerinside的调用do_int3,所以我的问题是,如何以及在哪里uprobe注册它的处理程序?

这是do_int3来自 x86 上的内核 5.7:

0 投票
1 回答
85 浏览

tcp - tcp_retransmit_skb 的 kprobe。而不是 tcp_retransmit_skb @tcp_states,我想 kprobe __napi_schedule

在 BPF Performance Tools 一书中,有一个 tcp_retransmit_skb 的 kprobe 实现。我想做同样的事情,但不是 tcp_retransmit_skb @tcp_states,我想kprobe_napi_schedule 并合并 'include/linux/netdevice.h' 的枚举 NAPI_STATE *。上面有我的实现:

当我尝试运行它时,它在我的“状态是”的 printf 中什么也没有显示。

输出是:

0 投票
1 回答
52 浏览

tcp - 如何在 kprobe 程序中使用 enum tcp mib 定义?

在这里,我尝试编写一个程序(kprobe)来包含像@tcp_states 这样的枚举tcp mib 在BPF Performance Tools bpftrace 一书中。枚举 tcp mib 位于“/include/uapi/linux/snmp.h”中:

当我尝试运行它时,输出是:

然后我尝试代替 TCP_MIB_MAX 来放置特定的数组位置,例如 5,(我修改了上面的代码):

当我尝试运行它时,输出是:

为什么不显示 TCP mib?并且在输出中什么也不显示?如何正确使用数组来显示@mib?