Como redirecionar as operações de E / S de arquivo de um processo para a memória ou um arquivo diferente?

2

Digamos que eu tenha um arquivo chamado arquivo.txt e um processo em execução com PID 12345 que às vezes lê e às vezes grava no arquivo .

  1. Existe alguma maneira de eu enganar o processo com o PID 12345 para ler ou gravar na memória (alocado por outro processo) toda vez que ele tentar ler ou gravar no arquivo .txt ?

  2. Existe alguma maneira de eu enganar o processo para ler e gravar em um arquivo diferente (como arquivo2.txt )?

Mesma pergunta para o Windows.

    
por anddero 09.08.2017 / 20:47

2 respostas

1

  1. Você pode criar um soquete de domínio unix chamado file.txt
  2. Você pode LD_PRELOAD uma biblioteca que implementa open() syscall para que ele abra o arquivo correto ou, no Linux, você pode usar o namespace de montagem com unshare e mount --bind em alguns casos.

De qualquer forma, você também pode LD_PRELOAD uma biblioteca com read() e write() chamadas, mas observe que isso não funcionará com executáveis vinculados estaticamente; você precisará usar ptrace se precisar lidar com isso.

    
por 09.08.2017 / 21:22
0

Você não pode alterar facilmente o arquivo que está lendo, mas pode facilmente alterar de qual arquivo o arquivo está lendo ...

> 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

Esse é o resultado quando você executa cp file2 file1 enquanto o script aguarda sua entrada. Depois de copiar os dados desejados no arquivo, você pode renomeá-lo, mas apenas dentro do sistema de arquivos.

Seu processo de execução não vai parar assim, então você terá que pausá-lo e reiniciá-lo depois que a cópia (e renomeação) terminar com

kill -STOP 12345
kill -CONT 12345

Você pode copiar um arquivo maior em um menor, mas copiar um menor em um maior pode causar efeitos desagradáveis, dependendo da posição atual do descritor de arquivo no arquivo.

    
por 09.08.2017 / 23:27