Linux에서의 VM 처리에 대해 읽었습니다. 분명히 syscall을 수행하기 위해 x86에 0xFFFFF000에 페이지가 있습니다. 호출 된 vsyscall 페이지. 과거에 호출 호출 전략은 int 0x80을 사용하는 것이 었습니다. 이 vsyscall 페이지 전략은 여전히 후드에서 int 0x80을 사용하고 있습니까, 아니면 다른 호출 전략 (예 : syscall opcode?)을 사용하고 있습니까? 부수적 인 질문 : int 0x80 메서드가 구형입니까? 당신은 현대 리눅스 바이너리에 ldd
를 실행하면vsyscall 페이지를 통한 Linux syscall 전략
1
A
답변
1
, 당신이 그 vsyscall 페이지에 있습니다 동적 (AMD64에서) linux-vdso.1
라는 라이브러리 또는 (86)에 linux-gate.so.1
, 연결 있다고 볼 수 있습니다. 이것은 커널이 제공하는 공유 라이브러리이며 모든 프로세스의 주소 공간에 매핑되며 시스템 호출을 수행하는 방법의 세부 사항을 캡슐화하는 C 함수가 들어 있습니다.
이 캡슐화의 이유는 시스템 호출을 수행하는 "기본"방법이 시스템마다 다를 수 있기 때문입니다. 인터럽트 0x80 방법은 x86에서 항상 작동해야하지만 최신 프로세서는 sysenter
(Intel) 또는 syscall
(AMD) 명령을 훨씬 더 효율적으로 지원합니다. 사용 가능한 프로그램을 사용할 수있게하려는 경우에도 동일한 컴파일 된 바이너리를 Intel 및 AMD (및 기타) 프로세서에서 실행해야하므로 공급 업체별 opcode가 포함되어서는 안됩니다. linux-vdso
/linux-gate
라이브러리는 이러한 프로세서 별 의사 결정을 일관된 인터페이스 뒤에 숨 깁니다.
자세한 내용은 this article을 참조하십시오.
답을 확인하십시오. http://stackoverflow.com/a/19942352/795910 –
@OttavioCampana : 감사합니다. 아주 멋진 것들. –