有没有办法监控和重定向线程或进程的文件访问?
例如,一个线程想要读取/etc/mysql/my.cnf,我想更改对 ~/my.cnf 的访问,或者如果我运行 touch/etc/test.config
我希望将文件重定向到 ~/somefolder/etc/test.config
。
我正在寻找一个适用于 Linux/Unix 的 C、C++ 库。
提前致谢
最佳答案
您可以编写一个在程序开始运行时预加载的共享对象。在 .so 中,您将重新定义 libc 函数 open()
。当调用者(被愚弄的程序)作为参数传递字符串 /etc/mysql/my.cnf
时,您将改为打开 ~/my.cnf
并返回打开的文件描述符。来电者不会知道其中的区别。
您的共享对象当然需要调用“真实的”open()
来打开文件句柄;您可以使用 dlsym()
获取指向原始 libc 函数的指针。
这看起来过于复杂,但实际上并非如此,它就像一个魅力。我曾多次使用它来欺骗一个我没有源代码的程序;它就像发条一样工作。
如果您想查看概念证明,请查看 my blog我在哪里写的。编码愉快!
关于c++ - 重定向文件访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261972/