사용자 공간에서 시스템 호출 재정의

사용자 공간에서 시스템 호출 재정의

프로세서 수준과 운영 체제에서 발생하는 권한에 대한 몇 가지 개념이 있습니다. 프로세서의 경우 일부 명령은 슈퍼프로그램 모드에서만 실행될 수 있습니다. 마찬가지로 운영 체제에서는 커널(시스템 호출)을 통하지 않고는 일부 작업을 수행할 수 없습니다.

질문: 이 두 개념은 어떻게 서로 매핑됩니까? 사용자 공간에서 시스템 호출을 완전히 다시 작성할 수 있나요? 그렇지 않다면 시스템 호출이 위의 권한 있는 명령을 숨기기 때문입니까?

답변1

간단히 말해서 특권 명령어는 일반적으로 하드웨어 장치의 I/O 또는 메모리 보호와 관련된 명령어입니다. 일부 중앙 논리를 거치지 않고 임의의 프로세스에서 이러한 프로세스에 액세스하면 프로세스가 다른 프로세스의 메모리를 손상시키고 파일 시스템을 엉망으로 만들 수 있습니다. 우연히든 고의로든 말이죠.

open(), read()write()파일에 액세스하고 궁극적으로 디스크나 다른 장치에 대한 I/O를 발생시키는 기타 호출 과 같은 몇 가지 일반적인 시스템 호출을 고려한다면 . 또는 fork()이는 mmap()한 프로세스 또는 다른 프로세스의 메모리에 영향을 미칠 수 있습니다.

물론 프로세스를 공식화하는 것과 같은 것들은아니요시스템 호출 호출에는 권한이 필요하지 않으며 라이브러리를 통해 수행할 수 있습니다. 위조된 시스템 호출의 결과도 마찬가지입니다. 물론 2주 전의 모든 타임스탬프를 변경하는 것과 같은 libfaketime작업 (예제 참조 )을 수행하려면 먼저 정확한 시간을 파악해야 하며 이는 시스템 호출을 통해 수행되어야 합니다. libfaketime및 외에도 프로세스가 UID 0에서 실행되는 척하는 libeatmydata경우가 있습니다 .fakeroot

관련 정보