다른 프로세스에서 파일 설명자를 조작하는 방법은 무엇입니까?

다른 프로세스에서 파일 설명자를 조작하는 방법은 무엇입니까?

경로에서 찾을 수 있는 모든 앱에 대한 파일 설명자를 조작(읽기, 쓰기 등)할 수 있는 방법이 있습니까 ?/proc/{pid}/fd

특히 소켓의 경우.

$ ll /proc/4229/fd
total 0
lrwx------. 1 vagrant vagrant 64 May 18 01:10 0 -> socket:[34147]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 1 -> socket:[34149]
lr-x------. 1 vagrant vagrant 64 May 18 01:10 10 -> /dev/null
lrwx------. 1 vagrant vagrant 64 May 18 01:10 11 -> socket:[34943]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 13 -> socket:[34945]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 14 -> socket:[34948]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 15 -> socket:[34950]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 2 -> socket:[34151]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 3 -> socket:[34153]
lr-x------. 1 vagrant vagrant 64 May 18 01:10 4 -> pipe:[34155]
l-wx------. 1 vagrant vagrant 64 May 18 01:10 5 -> pipe:[34155]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 6 -> anon_inode:[eventpoll]
lr-x------. 1 vagrant vagrant 64 May 18 01:10 7 -> pipe:[34156]
l-wx------. 1 vagrant vagrant 64 May 18 01:10 8 -> pipe:[34156]
lrwx------. 1 vagrant vagrant 64 May 18 01:10 9 -> anon_inode:[eventfd]

답변1

ptrace()기술적으로 / 를 사용하면 거의 모든 것이 가능합니다 gdb. 검색 결과.

사용은 ptrace()아치에 의존적이고 어색하며 AFAICT 아무도 당신을 위해 구현하지 않았습니다. 널리 사용되는 응용 프로그램은 fd를 프로세스에 주입하는 것이지만 이는 원하는 것과 거의 반대입니다.

무엇이 필요할지 생각해 봤는데 매우 고통스러워 보입니다.

gdb 스크립트 접근 방식을 사용하고 소스 코드를 볼 수 있습니다.선별하다. 아마도 gdb 내에서 FD를 통신하는 것은 여전히 ​​매우 어색할 것입니다. fds와 통신하는 방법은 sendmsg()유닉스 소켓을 통해 "보조 데이터"로 보내는 것입니다 .

불행히도 보조 데이터 전송은 일반적으로 매크로를 사용하여 수행됩니다. C 인터프리터는 놀라운 인상을 주지만 gdb매크로를 사용하는 것은 불가능하다고 생각합니다.

fds를 전달하는 다른 방법은 을 사용하는 fork()것이므로 약간 더 쉬운 옵션( 와 결합 exec())을 제공할 수 있습니다. 불행히도 그것은 가장 친한 친구처럼 보이지만 ptrace()그렇지 fork()않습니다. 일부가 있습니다Linux 관련 gdb 명령이는 작업을 수행할 수 있지만 중단점에 대한 지원만 언급합니다. gdb 명령이 call fork()현명하게 작동하도록 할 수 있는지 여부는 언급되지 않습니다. 작동하더라도 FD_CLOEXEC(close-on-exec)도 엉망으로 만들어야 할 수도 있습니다 . 그것도 매크로죠.

간단한 매크로의 숫자값을 찾는 것은 그리 어렵지 않습니다(screenify가 그렇게 작성되었습니다). 보조 데이터를 전송하기 위한 매크로 인터페이스는 그다지 복잡하지 않으므로 대신 리버스 엔지니어링하는 것이 더 쉬울 수 있습니다.

관련 정보