2009-10-29 4 views
2

Windows 실행 파일이 SYSENTER를 사용하고 AMD64 ISA를 구현하는 프로세서에서 실행되는 경우 어떻게됩니까? 나는이 주제 (OSes, 하드웨어/소프트웨어 상호 작용)에 새롭고 초보자 다. 그러나 내가 읽었던 것에서 SYSCALL이 Intel의 SYSENTER와 동등한 AMD64라는 것을 이해했다. 바라건대이 질문은 의미가 있습니다.사소한 SYSENTER/SYSCALL 질문

+0

그다지 사소한 것이 아닙니다 ... "무슨 일이 일어나는가?"라는 말은 무엇을 의미합니까? 그것이 어떻게 처리되는지 또는 그것이 작동 하는지를 알고 싶습니까? 추가 정보는 좋을 것입니다 – bastianneu

+0

주로 작동하는지 알고 싶었습니다. 그러나 실제로 무슨 일이 일어나는지 아는 것도 상처를주지 않을 것입니다. 답변 중 하나에 제공된 wiki-article은 "AMD64에는 긴 모드의 두 하위 모드 모두에서 SYSENTER와 SYSEXIT가 없습니다."라고 나와 있습니다. INT 0x2E, SYSENTER 및 SYSCALL을 사용하는 3 개의 x86-64 PE가있는 경우 모두 커널 공간으로 점프하기 위해 프로세서를 구현하는 x86-64에서 작동합니까? – qpp

+0

http://www.nynaeve.net/?p=48이 블로그 게시물은 Windows에서 시스템 호출 발송자가 입력 방법을 선택하는 방법에 대해 최소한 저에게 대답했습니다. – qpp

답변

2

지원되지 않는 SYSENTER를 사용하려고하면 "잘못된 opcode"예외가 발생할 수 있습니다. 이 상황은 드문 경우입니다. 일반적으로 Windows 실행 파일에는 커널 모드로 들어가기위한 지침이 직접 포함되어 있지 않습니다.

+1

예, Windows에서 일반적으로하는 일은 커널을 호출하는 코드가있는 DLL을 호출하는 것입니다. –

+1

실제로 직접 시스템 호출을하면 exe가 바이러스로 탐지되는 경우가 많습니다. –

0

AM64 프로세서는 이러한 문제를 처리하기 위해 다른 유형의 모드를 사용합니다.

SYSENTER는 정상적으로 작동하지만 그렇게 빠르지는 않습니다.

매우 유용한 사이트

는 다른 모드에 대해 시작합니다 : 그들은 AMD64 확장을 개발 할 때 사용되지 않는 기능의 무리를 제거있어 Wikipedia

0

. 주요한 것들 중 하나는 cs, ds, es, ss 세그먼트 레지스터의 제거입니다. 일반적으로 세그먼트 레지스터를로드하는 작업은 매우 비쌉니다 (CPU는 권한 검사를 수행해야하며 여러 메모리 액세스가 포함될 수 있습니다). 커널 모드에 들어가려면 새 세그먼트 레지스터 값을로드해야합니다.

SYSENTER 명령은 권한 검사를 수행하지 않고 (내부, 숨겨진) 세그먼트 설명자에 직접 복사 할 수있는 "섀도우 레지스터"집합을 사용하여이 작업을 가속화합니다. 대부분의 이점은 세그먼트 레지스터 두 개만으로 손실되므로 명령에 대한 지원을 제거하는 이유는 모드 스위치에 대한 일반 지침을 사용하는 것이 더 빠르다는 것입니다.

관련 문제