次のようなファイルがあるとしましょう。ファイル.txtそして走る処理PID 12345ファイルを読み取る場合もあり、書き込む場合もあります。
このプロセスを欺く方法はありますか?PID 12345読み書きしようとするたびに、他のプロセスによって割り当てられたメモリを読み書きします。ファイル.txt?
他のファイルを読み書きするプロセスをだます方法はありますか(例:ファイル2.txt)?
答え1
- 次の Unix ドメインソケットを作成できます。
file.txt
open()
正しいファイルを開くために、ライブラリで LD_PRELOAD システムコールを実装できます。あるいは、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
大きなファイルを小さなファイルにコピーできますが、小さいファイルを大きなファイルにコピーすると、ファイル内のファイル記述子の現在の場所によっては、不快な効果が発生する可能性があります。