문제

C로 작성된 작은 명령 줄 응용 프로그램이 다른 프로그램의 래퍼/런처 역할을합니다 (생각 : Xargs). 응용 프로그램은 freebsd/linux (fork ()/exec ()) 및 Windows (createProcess ())에서 컴파일하도록 작성됩니다. 아동 응용 프로그램에 대한 명령 줄 인수를 가로 채거나 주사하거나 다른 방식으로 조작 할 수있을뿐만 아니라 아동 프로그램의 파일 시스템 활동 (또는 어린이 등)을 가로 채는 쉬운 방법이 있는지 궁금했습니다. 나는 주로 읽기 또는 쓰기에 액세스 할 수있는 파일 이름에만 관심이 있지만 상기 파일의 내용은 아니며 가로 채는 것이 가능한 한 가벼워지기를 원합니다.

위의 관련 키워드를 인터넷 검색 할 때는 Win32에서이를 수행하는 방법에는 여러 가지가있는 것 같습니다. 파일 시스템 필터 드라이버에서 PE 가져 오기 테이블 헤더로 변조에 이르기까지. 이들 중 어느 것도 래퍼 프로그램 실행 파일 내에서 자체 포함 할 수있는 사소한 것 같지 않습니다 (예 : 대부분 메인 실행 파일과 함께 추가 DLL 또는 드라이버 파일이 필요합니다.) UAC 또는 다른 플랫폼 델타 주위를 해킹 할 필요없이. 그것은 내 아이 과정이므로, 나는 그들의 활동을 안전하게 모니터링 할 수 있어야한다고 생각합니다 :)

Linux에는 inotify ()가 있지만 내 아동 프로세스/ES에 관계없이 일반 파일 시스템 액세스를 모니터링합니다. freebsd의 kqueue ()도 마찬가지입니다. 이것들은 또한 래퍼의 여러 인스턴스가 다른 프로그램을 실행할 수있는 SMP 사례에서도 분류되며 각각은 자녀의 파일 시스템 활동을 서로 명확하게 해체해야합니다.

나는 SO 커뮤니티가 제공해야 할 제안에 대해 확실히 감사합니다.

도움이 되었습니까?

해결책

FOPEN을 연결하고 모든 아동 프로세스에 대해 LD_PRELOAD 환경 변수를 설정하는 "Interposer"라이브러리를 작성하십시오. 이것은 동적으로 연결된 라이브러리와 함께 작동합니다.

이를 수행하는 방법의 예는 여기에서 찾을 수 있습니다. http://developers.sun.com/solaris/articles/lib_interposers.html 그리고 http://lists.debian.org/debian-powerpc/2004/11/msg00039.html fopen () interposer에 대한 부분 구현을 보여줍니다 ..

다른 팁

내가 할 유일한 제안은 사용하는 것입니다 strace (추적 시스템 호출 및 신호), 이것은 디버깅 도구에 더 가깝고 추적되는 프로세스의 성능에 영향을 미칩니다.

strace -f -e trace=file -o <output-file> <cmd-line>

-f - follow forks
-e trace=file - will output system calls related to the file-system
-o <output-file>

IMHO- 익숙해지면 strace, 그것은 항상 무기고에있는 유용한 도구입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top