문맥
저는 표준 쉘 스크립트에서 Makefile을 자동으로 생성하는 도구를 설계하려고 합니다.
아이디어는 스크립트에 의해 실행되는 각 명령에 대해 읽고 쓴 파일을 등록한 다음 관련 명령과 함께 Makefile에 관련 종속성을 생성한다는 것입니다. 나는 그러한 명령의 범위를 제한하고 싶지 않습니다. 난해한 언어의 컴파일러 호출, 테스트 스위트, 패키징 시스템 등이 될 수 있습니다.
실제로 Makefile은 도구의 캐시일 뿐입니다. 병렬로 실행할 수 있는 명령에 대한 제안을 제공합니다. 첫 번째 실행에서는 완전한 순차 종속성을 가정하고 어떤 명령이 어떤 파일을 읽고 쓰는지 관찰합니다. 다음은 다시 실행해야 하는 명령만 실행하는 메커니즘이 있습니다.라만들다. 미묘한 점은 명령이 아직 최신이 아닌 파일(새 종속성)을 읽으려고 시도하는 경우 파일이 업데이트될 때까지 가로채는 호출이 중지된다는 것입니다.
질문
어떤 명령이 어떤 파일에 액세스했는지 감지하려면 실시간으로 파일에 대한 액세스를 차단해야 합니다.
사용을 고려했지만 LD_PRELOAD
모든 명령이 libc
호출을 사용하여 시스템 호출을 수행한다고 가정합니다. 이러한 시스템 호출을 캡처하기 위해 자체 커널 모듈을 구현하는 것을 고려했지만 도구에 부적절한 권한이 필요했습니다.
두 가지 해결책이 있습니다.
- 디버그 모드에서 명령 실행
- 운영 체제 가상화 기능을 사용하여 가상 환경에서 명령 실행
디버그 모드에서는 이러한 호출을 가로채기에 충분한 제어 기능을 제공합니까?예를 들어 이미 디버그 모드에서 실행 중인 하위 프로세스의 명령 스택에서 작동합니까?
그렇지 않다면 프로세서의 가상화 기능을 사용하려면 얼마나 많은 작업이 필요합니까?즉, 가상화된 운영 체제는 대부분 투명합니다(지속 동작 제외). 관련 없는 시스템 호출을 많이 구현해야 합니까?
가설
나는 사용자 공간 명령으로 액세스되는 파일에만 관심이 있고, 프로그램이 특권 모드에서 실행 중인 경우 "모니터링"할 수 있기를 원하지 않습니다. 파일이 명령에 의해 생성/업데이트되거나 시드라고 가정합니다.