我希望跟踪特定文件上的写入,所以我有一个想法,我可以这样做:
我在do_sys_open上创建一个探测,如果filename参数与我所寻找的模式匹配,我将使用一个触发器来启用一个返回探针,该探针获取返回的文件描述符id (它是$retval)。这个返回探测将在common_pid上有一个过滤器,因为我只对刚刚打开要监视的filename的do_sys_open调用返回的filename感兴趣。返回探针接受fd,并在sys_write上启用另一个探测,在common_pid和fd上设置一个过滤器。我希望通过这种方式,我只能在我正在监视的一个文件上跟踪write操作。
问题是,这不适用于多线程进程。如果一个进程同时调用open两次(使用两个线程),上述机制可能会失败。现在,我正试图找出一种方法,在do_sys_open的条目和do_sys_open上的返回探测之间进行关联,如果有任何建议,我会很高兴。
PS:我不确定这个问题是属于堆栈溢出还是unix & linux。
发布于 2016-01-27 16:05:18
你的做法是错误的。
首先,每个进程都有文件描述符号,因此您可以自动捕获几乎任何人编写任何东西来使用这样的fd号,这可能导致也可能不会写入您感兴趣的文件。
此外,sys_write在堆栈中太高,无法捕获所有合法的作者。
通常,您会查找您感兴趣的文件的inode,并在适当的写函数的基础上进行筛选。
但是,“监视写入文件”仍然有些模糊,因为不清楚如果有人要断开原始名称并使用该名称创建一个新文件,您希望发生什么。如果您想要处理,那么最好在某个开放的地方捕获线程,查看查找inode的内容,并将它们添加到原语中,以便您知道如何监视它。
无论如何,基于fd的监控是从根本上破坏的。
https://stackoverflow.com/questions/35030488
复制相似问题