0

다른 프로그램 메모리에 액세스하지 못하도록 프로그램을 보호하기 위해 OS가 제공하는 시스템 호출에 대해 알고 있습니다. 하지만 OS에서 제공하는 시스템 호출 라이브러리를 사용하면 도움이됩니다. 커널 모드에서 CPU 비트를 설정하고 권한이 부여 된 명령을 실행하는 어셈블리 코드를 직접 작성하는 경우 (메모리에서 OS의 프로그램 세그먼트를 수정한다고 가정 해 봅시다) OS가이를 방지 할 수 있습니까? 오후 8시 30 분 P.S. 호기심 질문에서. 좋은 블로그 나 책을 참고할 수 있다면 가능한 한 자세하게 OS를 공부하고 싶을 때 도움이 될 것입니다.OS가 어셈블리 수준 코드에서 악의적 인 메모리 액세스를 방지하는 방법은 무엇입니까?

+1

OS는 이러한 명령어가 예외를 발생시키는 모드에서 표준 프로세스를 실행합니다. 데이터 영역에서 코드를 실행할 수 없도록하는 기능을 포함하여 메모리도 보호됩니다. 그러나 디버거 유형 프로세스는이 모든 것을 무시할 수 있습니다. – rcgldr

+0

OS는 그러한 명령어가 예외를 발생시키는 모드를 어떻게 설정합니까? OS가 CPU를 프로세스에 넘겨 주면 프로세스는 아무 것도 할 수 없습니다. 따라서 프로세스가 권한 모드에 대해 CPU 플래그를 설정하고 모든 명령을 실행할 수없는 경우 –

+0

프로세서에 따라 다르지만 일반적으로 프로그램은 제한 모드에서 변경되지 못하도록 제한 모드로 실행됩니다. – rcgldr

답변

1

프로세서는 (1) 사용자가 상승 모드 (예 : 여기에서는 KERNEL)로 전환해야하므로 이러한 악의적 인 장난을 다시 보호합니다. (2) 커널 모드에 대한 액세스를 제한합니다.

사용자 모드에서 커널 모드로 전환하려면 인터럽트 (여기서는 적용 할 수 없음) 또는 예외가 있어야합니다. 일반적으로 둘 다 같은 방식으로 처리되지만 약간 이상하게 처리하는 일부 기괴한 프로세서가 있습니다 (인텔이라고 말 했나요?)

운영 체제 예외 및 인터럽트 처리기는 사용자 모드 프로그램에서 수행 할 수있는 작업을 제한해야합니다.

내가 커널 모드의 CPU 비트를 설정하고 특권 명령 당신은 단지 프로세서 상태에서 커널 모드 비트 커널 모드로 들어갑니다 등록 설정 캔트

을 실행하는 어셈블리 코드 자신을 작성하는 경우.

OS가이를 방지 할 수 있습니까?

CPU가이를 방지합니다.

좋은 블로그 나 책을 참고할 수 있다면 가능한 한 자세하게 OS를 공부하고 싶을 때 도움이됩니다.

VAX/VMS 시스템 내부 책은 오래되었지만 저렴하고 실제 OS가 어떻게 구현되었는지 보여줍니다.

+0

그래서 CPU가 프로그램 설정 커널 모드 비트를 보호한다면 OS가 커널 모드를 어떻게 설정합니까? 어떻게 OS가 커널 모드 또는 표준 프로그램을 설정하려고하는지 구분합니다. –

+0

@RishiSharma : OS가 먼저 실행됩니다. 모든 것을 상위 권한으로 설정 한 다음 프로세서 (코어)에 사용자 링 (덜 특권)에서 프로그램이나 사용자 프로그램을 실행하도록 요청하십시오. OS는 보호 모드라고하는 것을 계속 실행합니다. – amaneureka

0

이 블로그는 내 혼란이 무엇인지 명확히 설명합니다. http://minnie.tuhs.org/CompArch/Lectures/week05.html 사용자 프로그램은 커널 모드로 전환 할 수 있지만 인터럽트 명령어 (x86의 경우 int)를 통해 수행해야하며이 인터럽트의 경우 OS에서 인터럽트 처리기를 작성합니다. (아마 그것이 부팅 시간에 커널 모드에있을 때). 따라서 모든 권한있는 명령어는 OS 코드에 의해서만 실행될 수 있습니다.