Kprobe:将返回探测与入口探测相关联

时间:2016-01-27 06:45:59

标签: linux linux-kernel ftrace kprobe

我想跟踪特定文件的写入内容,因此我已经知道我可以这样做:

我在do_sys_open上创建了一个探针,如果filename参数符合我寻找的模式我使用触发器来启用一个返回探测器来获取返回的文件描述符id(&& #39; s $retval)。这个返回探针会在common_pid上有一个过滤器,因为我只对fd调用返回的do_sys_open感兴趣,这些调用刚刚打开了我想要的filename监控。 返回探针采用fd并在sys_write上启用另一个探针,并在common_pidfd上启用过滤器。 我希望通过这种方式,我只能跟踪我监控的一个文件上的write次操作。

问题在于,这不适用于多线程进程。如果一个进程同时调用open两次(使用两个线程),则上述机制可能会失败。现在,我试图找出一种方法在do_sys_open的条目与do_sys_open上的返回探测之间建立关联,我会对任何建议感到高兴。

PS:我不确定该问题是否属于stackoverflow或unix& Linux操作系统。

1 个答案:

答案 0 :(得分:0)

你的做法是错误的。

首先,每个进程都有文件描述符编号,因此您几乎可以自动捕获任何使用这样的fd编号的人,这可能会也可能不会写入您感兴趣的文件。

此外,堆栈中的sys_write太高,无法捕获所有合法的编写者。

通常,您会查找您感兴趣的文件的inode,并根据相应的写入函数进行过滤。

然而,"监控写入文件"仍然有些含糊不清,因为不清楚如果有人要取消原始名称的链接并创建一个具有该名称的新文件,您会想要发生什么。如果你想处理,你确实最好在开放的地方捕捉线程,看看查找了什么inode并将它们添加到你的原语中,以便你知道监视它。

无论如何,基于fd的监控从根本上被打破了。