Linux의 64비트 긴 모드에서 SYSENTER는 무엇을 수행합니까?

Linux의 64비트 긴 모드에서 SYSENTER는 무엇을 수행합니까?

x86 명령이 있습니다sysenter. 이는 인텔의 빠른 시스템 호출 방식인 것으로 보인다. SYSENTERIntel 프로세서에서는 LONG 모드(64비트)에서 작동하는 것 같습니다. AMD에서 제공 syscall한 대로 이 지침은 syscallEIP/ESP 등을 사용하여 설정하는 것은 사용자의 책임입니다.

너는 볼 수있어sysenter32비트 매개변수 목록. 전혀 걱정하지 마세요 . syscall칩이 롱 모드에 있을 때 int 0x80Linux에서 이 명령은 무엇을 합니까 ? sysenter그대로 받아도 소용없나요?

답변1

시스템 호출에 대한 액세스를 제공하는 CPU 명령은 단독으로 존재하지 않으며 운영 체제 ABI의 컨텍스트 내에서만 유용합니다.64비트 x86 Linux ABI다음 진입점이 지원됩니다(세부정보저수온망):

  • SYSCALL64비트 코드에서;
  • 32비트 및 64비트 코드에서 0x80을 인터럽트합니다.
  • SYSENTER32비트 코드에서.

(커널에 문서화된 추가 32비트는 SYSCALL혼란스러울 수 있습니다. 이는 64비트 코드에서 32비트 포인터를 사용하는 x32 시스템 호출 인터페이스입니다.)

사용자 공간에서는 상황이 더 간단합니다.

  • i386코드(32비트 포인터가 있는 32비트 코드)는 __kernel_vsyscallvDSO에서 사용해야 합니다(사용할 호출 메커니즘이 결정됨).
  • 다른 것을 사용해야 합니다 SYSCALL.

SYSENTER긴 모드에서 64비트 코드를 내보내려고 시도한 적은 없지만 이것이 유용한 작업을 수행할지는 확신할 수 없습니다.

관련 정보