问题标签 [bcc-bpf]

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 回答
1464 浏览

bpf - 无法将字符串与 eBPF 进行比较

当我运行以下代码时,出现错误。

错误:

但这工作得很好

谁能告诉我为什么会发生这种情况以及我该如何纠正它?我正在使用 python bcc 来挂钩该函数。

谢谢!

0 投票
1 回答
235 浏览

bpf - Generate a executable from bcc python script

bcc uses python to compile ebpf programs, is there any convenient way to generate a executable file from these python scripts so that I can run these tracing programs on servers where clang and llvm environment are not installed?

0 投票
1 回答
708 浏览

python - 如何使用 ebpf python 从打开的系统调用中打印文件路径?

我使用来自 python bcc 模块的 bpf,我希望我的探测函数将打印当前文件的文件路径(一种自定义的简化 opensnoop)。我怎样才能做到这一点?

这是我到目前为止所拥有的:

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 回答
167 浏览

system-calls - bpftrace 和 sys_read 系统调用

我正在尝试编写一个 bpftrace 脚本来获取从后缀进程传递的字符串和用于身份验证部分的 saslauthd。目标是检测我公司的入侵帐户。strace 命令给了我一些好的结果:

我可以恢复登录名/密码并检测是否有暴力破解运行。

但我尝试使用 bpftrace 获得相同的结果:

在这种情况下,我可以读取一些 sys_read 系统调用字符串,但不是全部。我不明白为什么我的 bpftrace 没有相同的结果。我还考虑了空字符以及为什么我使用str(arg1,arg2)来强制数组的大小。我也尝试过使用跟踪点,这是相同的结果。

也许有人可以帮助我了解我的错误在哪里?所以任何输入将不胜感激

0 投票
1 回答
832 浏览

hashmap - 映射结构的 BPF 哈希的功能

我正在编写一个维护每个进程跟踪的 BPF 工具,这意味着我需要某种二维数据结构。为了绕过 512 字节的限制,我决定使用支持的结构(映射)是我最好的选择。在浏览了iovisor docs之后,这似乎BPF_HASH_OF_MAPS是我需要的结构。我假设这个结构提供了一个键值对,其中“值”是另一个 BPF 映射。但是,根据它所采用的参数,“外部”结构似乎是一个数组(个人而言,从 github 文档中,我无法区分BPF_HASH_OF_MAPSBPF_ARRAY_OF_MAPS)。我是否被误导了:该BPF_HASH_OF_MAPS结构是否提供类似 hashmap 的功能?

0 投票
1 回答
499 浏览

python - python 与 BPF 映射的交互

我想知道是否有一个易于从 python 用户空间初始化 BPF 映射。对于我的项目,我将为每个进程提供一个看起来很吓人的 NxN 2d 浮点数组。为简单起见,让我们假设 N 在进程中是恒定的(比如 5)。为了实现对这些数据的内核支持,我可以执行以下操作:

我想知道是否有一种简单的方法可以从 python 初始化这个地图。就像是:

我想我困惑的症结在于——1)所有映射方法都可供用户使用,2)当从 python 对象到 c 结构时,我们如何确保类型一致

0 投票
1 回答
406 浏览

ctypes - 进程名称(comm)作为 BPF 映射的键

我一直在尝试设计一个工具,我可以在其中进行每个进程的跟踪,但这意味着我需要为每个进程提供一个键,以便我可以为每个进程存储键值映射配对。我本能地不喜欢使用结构或字符串作为键,有一段时间我在考虑如何访问 inode 值以将它们用作键。然而,有许多使用结构或字符串作为 hashmap 键的示例,Alexei 建议通常将进程名称用作键. 也就是说,我无法让这种哈希图的基本实现工作。在 BPF 程序中,跟踪点无法找到与 process_name 键相关的值。也许我正在比较内存位置而不是预期的字符串文字?c_types 的幕后是否发生了导致键之间不匹配的事情?

0 投票
1 回答
483 浏览

c - 使用 BPF 工具对“struct mnt_namespace”类型的不完整定义和前向声明?

我想要的是:

向密件抄送工具添加网络名称空间选项以execsnoop仅跟踪具有指定网络名称空间的日志,就像我们在许多其他密件抄送工具中具有过滤器 PID 选项一样。例如:execsnoop -N "ns_id"

我尝试了什么:

收到错误:

我也尝试包含 mnt_namespace.h 头文件,但没有解决。

0 投票
1 回答
294 浏览

c - 从'struct net *'分配给'u32'(又名'unsigned int')的整数转换指针不兼容

我想要的是:

向 execsnoop bcc 工具添加网络命名空间选项以仅跟踪具有指定网络命名空间的日志,就像我们在许多其他 bcc 工具中具有过滤 PID 选项一样。例如: execsnoop -N "ns_id"

我正在使用 linux 内核结构来检索命名空间 id net = task->nsproxy->net_ns;,并且需要将检索到的 ns 分配给data.netnsu32 int。

我在做什么:

我已添加#include </usr/include/stdint.h>,但文件中存在警告include <bits/libc-header-start.h>stdint.h

如果我解决了这个错误,它会继续生成其他丢失的头文件错误。