程序监控程序的读/写路径?

我正在尝试为大学项目制作一个程序,但我对此感到困惑: 如何监控程序写入或读取的文件? 我希望得到他们的路径名。 为了使问题更清楚,这是一个例子: 考虑我们希望监视的程序是a.exe,并且a.exe首先打开一个名为“a1”的文件,该文件与a.exe位于同一文件夹中,然后打开另一个名为“a2”的文件。 程序必须给出“a1”和“a2”文件的相对或绝对路径,而不管它们是否为读/写打开。 我如何在C ++中实现它? 编辑:是否可以将a1和a2文件的调用转移到另一个路径? EDIT2:好的,让我这样说吧:我已经将firefox.exe从C: program files移动到D:,现在当我运行firefox.exe它不会工作因为它适用于C中的许多文件: program files,firefox.exe将使用相对路径来访问文件。我打算做的是捕获firefox.exe工作的文件的调用,然后将调用定向到程序文件文件夹。 Plz让我知道我是否已经明确了......     
已邀请:
在linux上,您可以使用'strace'输出应用程序执行的不同系统调用。如果你需要实现一个与strace输出相同类型的输出的程序,快速实现可以包含一个简单的shell程序,它会影响strace的输出。否则,查看strace代码是一个良好的开端。 在Windows上,来自Sysinternals套件的'Process monitor'可能会帮到你。     
如果要将参数修改为
open(2)
creat(2)
truncate(2)
等,则可以使用Linux
ptrace
(2)工具拦截系统调用并在执行调用之前替换文件名字符串。
ptrace(2)
是黑魔法,所以除非它是高级课程,否则它可能不是你教授的意图。 (如果下一个讲座是关于编写像
gdb(1)
这样的调试器,那么这正是你教授的意图。) 您可以使用的另一种机制,可能更便携,是库或函数的插入 - 您可以在库中的特定函数周围编写小包装器,并通过使用
LD_PRELOAD
环境变量加载库(有关详细信息,请参阅
ld.so(8)
联机帮助页)影响库加载的环境变量),将调用您的函数而不是标准函数。 图书馆介入是灰色魔法;它比ѭ4更好地记录,但仍然很容易搞砸。     

要回复问题请先登录注册