问题标签 [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.
linux-kernel - kprobe_events 获取参数在 ARM 上不起作用
以下基于 kprobe_based 的事件示例运行良好:
但是,添加获取参数不起作用:
我认为问题是%ax
,%dx
...它们的含义是什么?我怎样才能使这段代码工作?
linux - Systemtap - 从内核空间调用系统调用
我正在尝试创建一个硬链接,直接从 Systemtap Embedded C 代码调用sys_link 。基本上,代码如下所示:
sys_link 不是由内核导出的,因此psys_link在初始化时使用kallsyms_lookup_name()解析,我可以测试地址是否正确解析。似乎正在调用系统调用,但它永远不会返回。
*我知道从内核空间调用系统调用不是最好的主意,但相信我,我需要这样做 ;) *
另一方面,我做了另一个更简单的测试,调用filp_open,它由内核导出,它甚至不是系统调用,它只是一个内核函数,以创建一个具有相同不成功结果的文件:
任何线索为什么内核被冻结?
更新: 系统调用和函数在syscall.open.return探针的上下文中调用。正如在其中一条评论中所讨论的,Systemtap返回探针是使用kretprobe实现的......它替换了蹦床的函数返回地址......这 AFAIU 意味着系统调用例程已经完成,这应该释放与文件系统本身,但我可能遗漏了一些东西。
那时调试内核给了我以下回溯显然,死锁在 kprobe 锁中。
注意:这是一个 ARM 机器回溯,但同样的结果发生在 i386 中。
linux - Can I block a new process execution using Kprobe?
Kprobe has a pre-handler function vaguely documented as followed:
I was wondering if one can use this function (or any other Kprobe feature) to prevent a process from being executed \ forked.
linux-kernel - 为什么 sys_futex 上的 kretprobe 调用频率低于相应的 kprobe?
我正在跟踪各种内核函数和系统调用,并在它们之间建立可用于某些性能分析的模式。
我注意到的一件事是,有时,即使在我的简单测试应用程序中,它启动了一些与一些互斥锁一起使用的线程,我也不会收到任何kretprobe__sys_futex
对kprobe__sys_futex
.
我假设这是因为例如一个线程正在调用sys_futex
,并进入睡眠状态或可能终止,但我实际上看到相同的进程sys_futex
连续多次调用,而返回探针却没有注意到任何事情。
然后我假设问题在于我如何过滤对 的调用kprobe__sys_futex
,所以我使用 BCC/eBPF 做了一个最小的例子来测试这个:
我注意到在各种应用程序中(一个很好的例子是 mysql-server,即使在空闲时也会执行常规的 futex 操作 - 至少在我的机器上),futex start
在返回探针的消息之前会打印许多(通常是 10+)s。
这是我在写这篇文章时运行了几分钟的上述程序的示例跟踪:
如您所见,例如 pid 697 似乎已经调用了sys_futex
四次,而仅在这个小跟踪中没有返回。
我认为这不是 eBPF 代码中的竞争条件,因为如果您将打印语句静音并且只定期打印,则计数通常会在零附近的几个范围内sys_write
,这比sys_futex
(至少在我的系统的工作负载上)更频繁地发生),所以我希望任何竞争条件都会加剧而不是解决。
我在位于 VirtualBox 的 Ubuntu 18.04 LTS 上运行内核 4.15.0-43-generic。
很高兴提供更多可能有用的上下文!
IOVisor 邮件列表中有一个相关的主题:https ://lists.iovisor.org/g/iovisor-dev/topic/29702757
linux-kernel - kprobe_events fetch-args 适用于 x86 但不适用于 arm64
我想将do_sys_open
文件名参数作为字符串。为此,我在 kprobetrace.txt 之后添加了kprobe。一个将文件名作为十六进制的简单探针适用于两者x86/arm64
。
但是,更改探针以获取文件名的字符串有效x86
但无效arm64
(即无法获取字符串表示形式filename_string=(fault)
)
x86:
手臂64:
为了检查我是否正确使用了 arm ABI,我尝试使用perf
. 从 perf 中看到的探针/sys/kernel/debug/tracing/kprobe_events
是相似的
filename_string=""
但是在这种情况下,性能探测也失败了(即)。
kprobe_events
设置arm 以获取 args 作为字符串的正确方法是什么?我是否错误地使用了 ABI?
ebpf - 异常:执行 sudo opensnoop-bpfcc 时无法将 BPF 附加到 kprobe
当我尝试执行时,sudo opensnoop-bpfcc
我收到此消息:
我不明白如何解决它。我刚刚使用此命令安装了密件抄送工具
正如github页面上的建议https://github.com/iovisor/bcc/blob/master/INSTALL.md#ubuntu---binary
正在运行的操作系统是 18.04.2 LTS(仿生海狸)。
c - 为什么 orig_ax 没有正确的系统调用号
我编写了一个基本的 kprobe linux 内核模块,它将为 fork 注册一个处理程序,并在处理程序中打印寄存器“orig_ax”的值。
我得到一个不同的值而不是 57
我犯错了吗
linux - Linux/Golang:无法访问 /sys/kernel/debug/tracing/kprobe_events
我在 LTS 内核(4.19.75)上运行 Arch linux。我检查了更新的内核,同样的问题。
我确实安装了 debugfs,并且作为 root 我可以看到这个文件:
我尝试修复/运行/fork(随意命名,原始代码在这里https://github.com/evilsocket/opensnitch)访问它的 Go 程序。这是它的作用:
它给了我这个错误(以root身份运行)
我也无法使用基本的 shell 命令(以 root 身份)写入它。“没有这样的文件”很奇怪,因为文件在那里。
我找不到关于这些特殊文件的很多信息,我最终阅读了这个:https ://www.kernel.org/doc/html/latest/trace/kprobetrace.html ...我没有找到任何原因我无法访问该文件。无论是通过简单的“回声”还是通过程序。
不知道我的系统上可能缺少什么/阻止我。
我正在使用 UEFI 启动运行,并且安全启动被禁用(在某个地方看到它可能很重要),我完全一无所知。
感谢任何知道在哪里看的人。
亲切的问候
c - 我们可以使用 kprobes 跟踪所有 Linux 内核函数吗
我阅读了以下有关 kprobes 的内容:
Kprobes 允许您为任何内核指令以及函数入口和函数返回处理程序安装预处理程序和后处理程序
我正在尝试为“_do_sys_open”函数注册一个 kprobe。
编写了注册 kprobe 的基本代码
加载此模块失败
这是否意味着此功能不能与 kprobes 一起使用。
它也没有列入黑名单