gpt4 book ai didi

linux - 拦截子进程文件系统事件的方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:56 25 4
gpt4 key购买 nike

我有一个用 C 编写的小型命令行应用程序,它充当其他程序的包装器/启动器(想想:xargs)。该应用程序被编写为在 FreeBSD/Linux(通过 fork()/exec())和 Windows(CreateProcess())上编译。除了能够拦截、注入(inject)或以其他方式操纵子应用程序的命令行参数之外,我想知道是否有一种简单的方法来拦截子程序的文件系统事件(或者它的子程序,等等)。我主要只对读取或写入访问的文件名感兴趣,而不是所述文件的内容,并且希望拦截尽可能轻量级。

从上面谷歌搜索一些相关关键字,似乎在 Win32 中有很多方法可以做到这一点。从文件系统过滤驱动到篡改 PE 导入表头。这些看起来都不是微不足道的,也不是我可以在我的包装程序的可执行文件中独立包含的东西(例如,除了主要的可执行文件之外,大多数都需要额外的 DLL 或驱动程序文件。)另外,如果可能的话,我希望它能在 Windows XP 到 7 上工作,而不必绕过 UAC 或其他平台增量。这是我的子进程,所以我想我应该能够安全地监视它的事件:)

在 Linux 上,有 inotify(),但它只监视一般文件系统访问,而不考虑仅我的子进程/es。 FreeBSD 的 kqueue() 也是如此。这些在 SMP 情况下也会崩溃,在这种情况下,包装器的多个实例可能正在运行不同的程序,并且每个实例都需要相互区分自己的子文件系统事件。

我非常感谢 SO 社区可能必须提供的任何建议。

最佳答案

我唯一的建议是使用 strace(跟踪系统调用和信号),虽然这更像是一个调试工具,并且确实会影响被跟踪进程的性能

strace -f -e trace=file -o <output-file> <cmd-line>

-f - follow forks
-e trace=file - will output system calls related to the file-system
-o <output-file>

恕我直言 - 如果您熟悉 strace,它总是一个有用的工具。

关于linux - 拦截子进程文件系统事件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com