x86 명령이 있습니다sysenter
. 이는 인텔의 빠른 시스템 호출 방식인 것으로 보인다. SYSENTER
Intel 프로세서에서는 LONG 모드(64비트)에서 작동하는 것 같습니다. AMD에서 제공 syscall
한 대로 이 지침은 syscall
EIP/ESP 등을 사용하여 설정하는 것은 사용자의 책임입니다.
너는 볼 수있어sysenter
32비트 매개변수 목록. 전혀 걱정하지 마세요 . syscall
칩이 롱 모드에 있을 때 int 0x80
Linux에서 이 명령은 무엇을 합니까 ? sysenter
그대로 받아도 소용없나요?
답변1
시스템 호출에 대한 액세스를 제공하는 CPU 명령은 단독으로 존재하지 않으며 운영 체제 ABI의 컨텍스트 내에서만 유용합니다.64비트 x86 Linux ABI다음 진입점이 지원됩니다(세부정보저수온망):
SYSCALL
64비트 코드에서;- 32비트 및 64비트 코드에서 0x80을 인터럽트합니다.
SYSENTER
32비트 코드에서.
(커널에 문서화된 추가 32비트는 SYSCALL
혼란스러울 수 있습니다. 이는 64비트 코드에서 32비트 포인터를 사용하는 x32 시스템 호출 인터페이스입니다.)
사용자 공간에서는 상황이 더 간단합니다.
i386
코드(32비트 포인터가 있는 32비트 코드)는__kernel_vsyscall
vDSO에서 사용해야 합니다(사용할 호출 메커니즘이 결정됨).- 다른 것을 사용해야 합니다
SYSCALL
.
SYSENTER
긴 모드에서 64비트 코드를 내보내려고 시도한 적은 없지만 이것이 유용한 작업을 수행할지는 확신할 수 없습니다.