최신 커널에서는 INT X80 명령어와 sysenter 명령어를 사용하여 시스템 호출이 호출된다는 것을 읽었습니다. sysenter 지시문은 다른 방법보다 호출 속도도 빠릅니다.
이 방법으로 호출되는 모든 시스템 호출을 어떻게 확인할 수 있나요?
답변1
2.6 이전 커널을 실행하지 않는 한 대부분의 시스템 호출을 호출하는 데 이 방법을 사용하지 않습니다. 커널 2.6(2.5 시리즈부터 시작)부터 int x80
중요한 작업을 수행하기 위해 이 방법으로 대체되었습니다.systenter/sysexit
이전 커널에 대해 빌드된 이전 바이너리가 있는 경우 이 int x80
방법으로 계속 작동합니다. 할 수 있는 유일한 작업은 다시 빌드하는 것(또는 최신 바이너리를 얻는 것)입니다. 걱정되는 프로그램을
실행해 보세요 . 또는 ldd your_exe
가 나열되면 새 시스템 호출을 사용하고 있는 것입니다. 그렇지 않다면 아마도 이전 방법을 사용할 것입니다. 정적 바이너리를 사용하면 말하기가 어렵습니다. 한 가지 방법은 시스템 호출 래퍼( 좋은 후보) 를 찾는 것 입니다. 인터럽트를 사용하는지 여부는 디스어셈블리에서 확인할 수 있습니다.linux-gate.so.1
linux-vdso.so.1
objdump your_exe | less
__gettimeofday
기존 INT 80 호출의 작동 방식과 새로운 시스템 호출 인터페이스의 구성 및 설정 방법에 대한 자세한 개요는 여기에서 확인할 수 있습니다.시스템 호출(안드리스 브라우어).
읽어볼만한 또 다른 좋은 책:linux-gate.so.1이란 무엇입니까?.
두 기사 모두 다른 기사에 연결되어 있습니다.Linux 2.6의 Sysenter 기반 시스템 호출 메커니즘, 그리고 다음을 가리킨다.Linux 커널에 대해 알아보기Daniel P. Bovet과 Marco Cesati가 쓴 책은 보다 일반적인 정보를 제공하는 데 탁월합니다.
한마디로: 걱정하지 마세요. 충분히 새로운 시스템(CPU, 커널 및 배포판)이 있다면 "빠른" 시스템 호출을 사용하고 있는 것입니다.