跨平台文件访问跟踪

时间:2020-03-05 18:41:44  来源:igfitidea点击:

我希望能够跟踪特定程序调用的文件读/写。不需要有关实际事务的信息,只需涉及的文件名。

是否有跨平台的解决方案?
有哪些特定于平台的方法?
在Linux上,我知道有strace / ptrace(如果有更快的方法也很好)。
我认为在Mac OS上有ktrace。
Windows呢?

另外,如果可以阻止(延迟)文件访问直到以后,那将是惊人的。

谢谢!

解决方案

回答

在Windows上,我们可以使用命令行工具Handle或者GUI版本的Process Explorer来查看给定进程打开了哪些文件。

如果要在自己的程序中获取此信息,则可以使用Microsoft的IFS工具包编写文件系统过滤器。文件系统过滤器将显示所有进程的所有文件系统操作。文件系统过滤器在AV软件中用于打开文件之前进行扫描或者扫描新创建的文件。

回答

最简洁的答案是不。有很多特定于平台的解决方案都可能具有相似的接口,但是由于文件系统往往是特定于平台的,因此它们并不是固有的跨平台的。

How do I do it well on each platform?

同样,这将取决于平台:)对于Windows,如果要跟踪飞行中的读写,则可能必须使用IFS。如果只想通知更改,则可以使用ReadDirectoryChangesW或者NTFS更改日志。

我建议仅使用NTFS更改日志,因为它往往更可靠。

回答

只要程序启动要监视的进程,就可以编写调试器,然后在每次进程启动或者退出时都会收到通知。进程启动时,我们可以注入DLL来挂接每个单独进程的CreateFile系统调用。然后,挂钩可以使用管道或者套接字将文件活动报告给调试器。