假设我有一个名为文件.txt和一个跑步处理与PID 12345有时读取该文件,有时写入该文件。
有什么办法可以欺骗这个过程吗PID 12345每次尝试读取或写入时读取或写入内存(由另一个进程分配)文件.txt?
有什么方法可以欺骗进程来读取和写入不同的文件(例如文件2.txt)?
答案1
- 您可以创建一个名为的unix域套接字
file.txt
- 您可以 LD_PRELOAD 实现系统调用的库,
open()
以便它将打开正确的文件,或者在 Linux 中,您可以在某些情况下使用挂载命名空间unshare
和。mount --bind
read()
无论哪种方式,您都可以使用 LD_PRELOAD和调用库write()
,但请注意,这不适用于静态链接的可执行文件;ptrace
如果您需要处理这些,您将需要使用。
答案2
您无法轻松更改正在读取的文件,但可以轻松更改正在读取的文件......
> cat file1
123456
> cat file2
abcdef
!/bin/bash
exec 4<>file1
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -p "Press enter to continue" cont
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
read -n 1 -u 4 input
echo $input
./testscript.sh
1
2
3
Press enter to continue
d
e
f
cp file2 file1
这是当脚本等待您的输入时执行此操作的结果。将所需数据复制到文件后,您可以重命名它,但只能在文件系统内重命名。
您正在运行的进程不会像这样暂停,因此您必须暂停它并在复制(和重命名)完成后重新启动它
kill -STOP 12345
kill -CONT 12345
您可以将较大的文件复制到较小的文件中,但将较小的文件复制到较大的文件中可能会导致不愉快的效果,具体取决于文件描述符在文件中的当前位置。