다른 프로그램 메모리에 액세스하지 못하도록 프로그램을 보호하기 위해 OS가 제공하는 시스템 호출에 대해 알고 있습니다. 하지만 OS에서 제공하는 시스템 호출 라이브러리를 사용하면 도움이됩니다. 커널 모드에서 CPU 비트를 설정하고 권한이 부여 된 명령을 실행하는 어셈블리 코드를 직접 작성하는 경우 (메모리에서 OS의 프로그램 세그먼트를 수정한다고 가정 해 봅시다) OS가이를 방지 할 수 있습니까? 오후 8시 30 분 P.S. 호기심 질문에서. 좋은 블로그 나 책을 참고할 수 있다면 가능한 한 자세하게 OS를 공부하고 싶을 때 도움이 될 것입니다.OS가 어셈블리 수준 코드에서 악의적 인 메모리 액세스를 방지하는 방법은 무엇입니까?
답변
프로세서는 (1) 사용자가 상승 모드 (예 : 여기에서는 KERNEL)로 전환해야하므로 이러한 악의적 인 장난을 다시 보호합니다. (2) 커널 모드에 대한 액세스를 제한합니다.
사용자 모드에서 커널 모드로 전환하려면 인터럽트 (여기서는 적용 할 수 없음) 또는 예외가 있어야합니다. 일반적으로 둘 다 같은 방식으로 처리되지만 약간 이상하게 처리하는 일부 기괴한 프로세서가 있습니다 (인텔이라고 말 했나요?)
운영 체제 예외 및 인터럽트 처리기는 사용자 모드 프로그램에서 수행 할 수있는 작업을 제한해야합니다.
내가 커널 모드의 CPU 비트를 설정하고 특권 명령 당신은 단지 프로세서 상태에서 커널 모드 비트 커널 모드로 들어갑니다 등록 설정 캔트
을 실행하는 어셈블리 코드 자신을 작성하는 경우.
OS가이를 방지 할 수 있습니까?
CPU가이를 방지합니다.
좋은 블로그 나 책을 참고할 수 있다면 가능한 한 자세하게 OS를 공부하고 싶을 때 도움이됩니다.
VAX/VMS 시스템 내부 책은 오래되었지만 저렴하고 실제 OS가 어떻게 구현되었는지 보여줍니다.
그래서 CPU가 프로그램 설정 커널 모드 비트를 보호한다면 OS가 커널 모드를 어떻게 설정합니까? 어떻게 OS가 커널 모드 또는 표준 프로그램을 설정하려고하는지 구분합니다. –
@RishiSharma : OS가 먼저 실행됩니다. 모든 것을 상위 권한으로 설정 한 다음 프로세서 (코어)에 사용자 링 (덜 특권)에서 프로그램이나 사용자 프로그램을 실행하도록 요청하십시오. OS는 보호 모드라고하는 것을 계속 실행합니다. – amaneureka
이 블로그는 내 혼란이 무엇인지 명확히 설명합니다. http://minnie.tuhs.org/CompArch/Lectures/week05.html 사용자 프로그램은 커널 모드로 전환 할 수 있지만 인터럽트 명령어 (x86의 경우 int)를 통해 수행해야하며이 인터럽트의 경우 OS에서 인터럽트 처리기를 작성합니다. (아마 그것이 부팅 시간에 커널 모드에있을 때). 따라서 모든 권한있는 명령어는 OS 코드에 의해서만 실행될 수 있습니다.
OS는 이러한 명령어가 예외를 발생시키는 모드에서 표준 프로세스를 실행합니다. 데이터 영역에서 코드를 실행할 수 없도록하는 기능을 포함하여 메모리도 보호됩니다. 그러나 디버거 유형 프로세스는이 모든 것을 무시할 수 있습니다. – rcgldr
OS는 그러한 명령어가 예외를 발생시키는 모드를 어떻게 설정합니까? OS가 CPU를 프로세스에 넘겨 주면 프로세스는 아무 것도 할 수 없습니다. 따라서 프로세스가 권한 모드에 대해 CPU 플래그를 설정하고 모든 명령을 실행할 수없는 경우 –
프로세서에 따라 다르지만 일반적으로 프로그램은 제한 모드에서 변경되지 못하도록 제한 모드로 실행됩니다. – rcgldr