问题标签 [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.
c - 为什么 `my_do_fork` 和 `post_handler` 被执行但 `pre_handler` 没有被执行?
我jprobe
在内核模块中使用过,一切正常。pre_handler
除了没有执行的事实。
为什么my_do_fork
和post_handler
被执行但pre_handler
不是?
linux - 从 kprobe 获取 args 未找到 regs->rdi x86_64
我正在 Scientific Linux 6.3 x86_64 下编写一个内核模块,我希望使用 kprobes。在这个模块中,我需要在返回时访问函数的第一个参数,所以 jprobes 出来了。
我发现这篇文章很有帮助:Getting function arguments using kprobes
但是,当我尝试访问regs->rdi
我的探针时,编译器会抱怨
在我的模块初始化期间,我运行此检查没有问题:
还有什么我应该看的吗?
uname -r
返回2.6.32-279.14.1.el6.x86_64.debug
这是一个MWE:
结果是:
linux-kernel - 如何使用 kprobe 计算 linux 内核中的 malloc
我想malloc
在fedora 中用Kprobe 计算系统调用。我知道这malloc
不是系统调用,而是在用户空间中实现的,但如果可能的话,我想用 kprobe 来计算 malloc。
我必须给 Kprobe 的系统调用的名称是什么?例如对于 do_work:
linux - 在每次系统调用时插入 kprobes
如何在每个系统调用点插入内核探针?我需要跟踪程序进行的所有系统调用。我设法检测了一些例程,但不是实际的系统调用。
谢谢
linux-kernel - 带有 DDK 的 XenServer 不支持 Kprobes?
我安装了 XenServer 6.0.0 和 DDK,我想开发一个内核模块,所以我编写了一个基本的 kprobes 程序。它在redhat等普通linux上运行正常并输出“在sys_ioctl之前”,但在XenServer上它只输出“Hypercall FI内核模块:init”,不能输出“在sys_ioctl之前”。
那么,是什么原因呢?XenServer 不支持 Kprobes 或我的程序有错误?
这是我的简单代码。kp.addr
基于不同cat /proc/kallsyms | grep sys_ioctl
,我尝试过do_fork
,问题也存在。
c - 劫持 Syscall:从 struct pt_regs (64bit-x86) 访问系统调用参数
使用 kprobes pre_handler,我试图从 struct pt_regs 访问系统调用参数并修改它们(这是主要目标),然后再调用实际的系统调用本身。
说我在试探sys_link
。
pre_handler 定义如下:(从这里)
当我link file1 file2
在终端上运行时,dmesg 给出以下输出:
前两个参数转到寄存器edi
,esi
因此在这种情况下,edi
必须包含地址,file1
并且esi
必须包含地址file2
。
在我从 pre_handler 返回之前,我想修改这些寄存器值,比如将值更改esi
为指向file3
(因此 char __user *newname 现在指向)。file3
鉴于这样的修改,现在sys_link
应该使用file1
和file3
作为它的论点。这可能吗?如果是这样,怎么做?
linux-kernel - 如何使用kprobe监控多个系统调用
所以我想监控多个系统调用 mkdir、fork、write、open、pipe、read、rmdir 等。我已经获得了一个可以监控单个系统调用的 kprobe 解决方案。我这样做的第一次尝试是创建多个系统调用,如下所示:
这会使 VM 崩溃所以现在我正在寻找另一种监控多个系统调用的方法。到目前为止,我唯一的想法是分叉这个过程。我知道 kprobe 可以设置一个寄存器然后检查该寄存器所以我认为它之前崩溃的原因是因为多个 kprobe 实例试图写入单个寄存器。因此,Forking 似乎可行,因为每个系统调用监视器都有自己的内存空间(寄存器、堆、堆栈等)。任何想法将不胜感激。
linux - 未为 system_call 函数插入内核探针
我可以使用kprobe
以下示例代码使用机制来附加处理程序:
但是,看起来并非所有内核例程都可以通过这种方式进行跟踪。我试图附加处理程序以system_call
通过任何系统调用执行来调用它们,并进行以下更改:
并且没有插入探针。dmesg
显示register_kprobe
返回 -22 即-EINVAL
. 为什么这个函数无法追踪?是否可以在调度任何系统调用之前附加 kprobe 处理程序?
c - 从汇编代码中删除堆栈依赖项
我试图从以下代码中删除堆栈依赖项。
在上面的函数中,stmdb sp!, {%[regs], r11}
推入堆栈,然后再检索r1
。r11
就我而言,我应该避免在这里使用堆栈。所以我重写了
当我编译时,我得到以下错误。
我在这里指的是内部搬迁未修复。但它没有给出明确的想法。请分享您对此的了解。
linux-kernel - kprobes中未定义异常处理程序(__und_svc)的作用是什么?
我试图将 kprobe 转换为可加载的内核模块。
我能够运行samples/kprobes/
内核树文件夹中可用的示例。
如果我们在 kernel( CONFIG_KPROBES
) 中配置 kprobes,那么svc_entry
宏将在__und_svc()
处理程序中扩展为 64 字节。
参考: http://lxr.free-electrons.com/source/arch/arm/kernel/entry-armv.S?a= arm#L245
我的目标是不涉及内核方面,将 kprobe 作为内核模块。
所以内核在不启用 CONFIG_KPROBES 的情况下编译。所以 svc_entry 宏将在 __und_svc()中扩展为 0
我想摆脱这些疑虑。
如果 kprobe 处理了未定义的指令异常(只创建了 bcos kprobe),那么为什么
__und_svc()
会被调用。__und_svc()
处理程序对于 kprobes的作用是什么?如果 64 字节内存是强制性的,那么如何在不编译内核的情况下进行分配。即如何动态地做到这一点。??
请分享你的知识。