파일 시스템과 관련된 모든 시스템 호출을 가로 채고 대신 내 자신의 코드를 실행하는 데 관심이 있습니다. 예를 들어, creat, write, close, lseek, getcwd 등의 호출. execve와 같은 함수를 생성하여 생성 된 프로그램의 모든 파일 I/O를 호출 프로세스에서 관리하는 메모리 파일 시스템으로 캡처합니다. 이렇게하면 호출 프로그램은 파일 시스템 오버 헤드없이 출력을 검사 할 수 있습니다.파일 시스템에 대한 호출을 차단하는 방법
내 유스 케이스는 API 또는 라이브러리가없는 큰 수치 시뮬레이션 프로그램과 함께 작동합니다. 이러한 프로그램은 입력 및 출력 파일을 통해서만 통신합니다. 이러한 파일이 크면 I/O를 수행하기 위해 런타임의 상당 부분을 차지할 수 있습니다. 수퍼 사용자 권한이있는 일부 컴퓨터에서는 RAM에있는 파일 시스템 (예 : Linux의 경우 tmpfs)을 설정할 수 있지만 수퍼 사용자 권한이 없거나 특정 방식으로 구성된 컴퓨터가 불가능합니다 .
나는 LD_PRELOAD를 사용하여 libc의 함수 대신 사용자 정의 코드를 호출 할 수 있음을 이해합니다. 그러나 이는 동적으로 링크 된 프로그램에서만 작동하며 호출 프로그램 (메모리 파일 시스템에서 호스트하려는)과 호출 수신자간에 IPC를 수행하는 방법에 대한 질문에 대답하지 않습니다. 이 접근법에 대한 질문은 IPC를 최상으로 수행하는 방법입니다. 파이프, 유닉스 도메인 소켓 또는 일부 공유 메모리를 사용해야합니까?
나는 시스템 호출을 가로 채기위한 방법으로 ptrace를 살펴 보았습니다. 이것은 작동하는 것처럼 보이지만이 접근법에 대해 두 가지 질문이 있습니다. 먼저, 실제 시스템 호출이 발생하지 않도록하는 방법 (일부 예제에서 보았 듯이 시스템 호출에 대한 인수를 수정하는 것과 반대). 둘째, ptrace는 호출 수신자의 메모리 공간을 고성능으로 읽을 수 있습니까?
플래쉬는 더 이상 존재하지 않는 것 같습니다. – Gael