2008-08-21 5 views
3

특정 프로그램 호출에 대한 파일 읽기/쓰기를 추적하고 싶습니다. 실제 트랜잭션에 대한 정보는 필요하지 않으며 관련 파일 이름 만 필요합니다.크로스 플랫폼 파일 액세스 추적

이에 크로스 플랫폼 솔루션이 있습니까?
다양한 플랫폼 별 방법은 무엇입니까?
Linux에서는 strace/ptrace가 있다는 것을 알고 있습니다 (더 빠른 방법이 좋을 경우).
나는 맥 OS에 ktrace가 있다고 생각한다.
Windows는 어떤가요? 이 차단할 수있을 것입니다 경우

또한, 파일이 일부 나중에까지 액세스 (교체 아웃 스톨) 놀라운 것입니다.

감사합니다!

+0

이 질문에 대한 답변을 찾고 있습니다. 나는 (당신 같은) Mac OS에서 ktrace를 사용할 수 있기를 바랬지 만 시스템 호출은 제거 된 (숨겨져있는 것 같습니다). Mac에서 ktrace로 행운이 있었나요? –

답변

0

Windows에서 명령 줄 도구 Handle 또는 GUI 버전 Process Explorer을 사용하면 특정 프로세스가 열려있는 파일을 볼 수 있습니다.

당신은 당신의 자신의 프로그램은 파일 시스템 필터를 작성하는 Microsoft의 IFS kit을 사용할 수있는이 정보를 얻을 찾고 있다면. 파일 시스템 필터는 모든 프로세스에 대한 모든 파일 시스템 작업을 표시합니다. 파일 시스템 필터는 AV 소프트웨어에서 파일을 열기 전에 스캔하거나 새로 생성 된 파일을 스캔하는 데 사용됩니다.

1

짧은 대답은 아니오입니다. 비슷한 인터페이스를 가지고있는 플랫폼 별 솔루션은 많이 있지만 파일 시스템이 특정 플랫폼에 의존하기 때문에 본질적으로 크로스 플랫폼이 아닙니다.


어떻게 각각의 플랫폼에서 잘 할 수 있습니까?

다시 말하지만, 플랫폼에 따라 달라집니다. Windows의 경우 I/O에서 읽음/쓰기를 추적하려면 IFS를 사용해야 할 수 있습니다. 변경 사항에 대한 알림을 받으려면 ReadDirectoryChangesW 또는 NTFS 변경 저널을 사용할 수 있습니다.

나는 더 신뢰할 수있는 경향이 단지 때문에 NTFS 변경 저널을 사용하는 것이 좋습니다 것입니다.

+1

각 프로세스가 변경되는 NTFS 변경 저널 보고서가 있습니까? –

0

는만큼 프로그램이 모니터링 할 프로세스를 시작으로, 당신은 디버거를 쓸 수 있습니다 그리고 당신은 프로세스가 시작하거나 종료 할 때마다 알림이 표시됩니다. 프로세스가 시작되면 DLL을 삽입하여 각 프로세스에 대한 CreateFile 시스템 호출을 연결할 수 있습니다. 후크는 파이프 또는 소켓을 사용하여 파일 활동을 디버거에보고합니다.

+0

C에서이 후킹을 수행하는 방법에 대한 힌트가 있습니까? –

+0

Google은 DLL 핫 패치 또는 그와 비슷한 것을 제공합니다. 디버거 프로세스는 디버깅중인 프로세스에 CreateRemoteThread를 사용하여 프로세스의 일부가되는 자체 DLL을로드하는 LoadLibrary를 호출하고 핫 패치 기술을 사용하여 시스템 DLL의 모든 기능에 대한 모든 호출을 차단할 수 있습니다. – Emil