developer tip

더 나은 "int 0x80"또는 "syscall"은 무엇입니까?

copycodes 2020. 12. 30. 08:19
반응형

더 나은 "int 0x80"또는 "syscall"은 무엇입니까?


Linux 커널을 연구 한 결과 x86_64 아키텍처의 경우 인터럽트 int 0x80가 시스템 호출 호출에 작동하지 않는다는 것을 알았습니다 .

(편집자 주 : 엄격히 사실이 아닙니다. 경우에 따라 작동하지만 권장되지 않습니다. 64 비트 코드에서 32 비트 int 0x80 Linux ABI를 사용하면 어떻게됩니까? )


i386 아키텍처의 (32 비트 x86 사용자 공간)의 경우, 더욱 바람직 무엇인가 syscall또는 int 0x80그 이유는 무엇입니까?

편집 : 커널 3.4를 사용합니다.


  • syscall에서 커널 모드로 들어가는 기본 방법입니다 x86-64. 이 명령어는 Intel 프로세서 의 32 비트 작동 모드에서는 사용할 수 없습니다 .
  • sysenter32 비트 작동 모드에서 시스템 호출을 호출하는 데 가장 자주 사용되는 명령어입니다. 와 비슷 syscall하지만 사용하기가 조금 더 어렵지만 커널의 관심사입니다.
  • int 0x80 시스템 호출을 호출하는 레거시 방법이므로 피해야합니다.

시스템 호출을 호출하는 바람직한 방법은 시스템 호출을보다 효율적으로 사용할 수 있도록 각 프로세스 주소 공간에 매핑 된 메모리의 일부인 VDSO를 사용하는 것입니다 (예 : 일부 경우에는 커널 모드로 전환하지 않음). VDSO는 또한 레거시 int 0x80방식, 처리 syscall또는 sysenter지침 에 비해 더 어려운 작업을 처리 합니다.

또한 thisthis를 참조하십시오 .


여기 내 대답 은 귀하의 질문을 다룹니다.

실제로 최근 커널은 특히 시스템 호출을 동적으로 최적화하기 위해 VDSO를 구현하고 있습니다 (커널은 VDSO를 현재 프로세서에 가장 적합한 코드로 설정합니다). 따라서 VDSO를 사용해야하며 기존 시스템 호출의 경우 libc에서 제공하는 인터페이스를 더 잘 사용할 수 있습니다.

간단한 시스템 호출 비용의 상당 부분 인 AFAIK가 사용자 공간에서 커널로 이동하고 그 반대 방향으로 이동합니다. 따라서, 어떤 시스템 콜 (아마 gettimeofday, getpid...)을 VDSO는 (진짜 콜을하고 피할 수있는 기술적)도 피하기 수 있습니다. 대부분의 시스템 콜 (같은 open, read, send, mmap....) 시스템 콜의 커널 비용은 큰 커널 공간 전환에 사용자 공간의 개선을 할 수있는 충분한 (예를 들어, 사용 인 SYSENTER또는 SYSCALL기계 명령어 대신에 INT) 중요하지.


변경하기 전에주의하십시오. 0x80 또는 syscall을 수행 할 때 시스템 호출 번호가 다릅니다 . 예를 들어 sys_write는 0x80에서는 4이고 syscall에서는 1입니다.

32 비트 또는 0x80의 경우 http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html http://blog.rchapman.org/post/36801038863/linux-system-call-table- for-x86-64 for syscall


int 0x80커널에 대한 시스템 호출 을 나타 내기위한 더 나은 용어 입니다.

의미와 해석은 서로 바꿔서 사용할 수 있습니다. 'make a syscall'또는 'issue int 80h'.

DOS 시대와 다르지 않습니다.

  • int 21h를 호출하여 DOS가 AX 레지스터 및 선택적으로 ES : DX 레지스터 쌍에 정의 된 작업을 수행하도록합니다.
  • int 13h는 BIOS 하드 디스크 처리기입니다.
  • int 10h는 EGA / VGA 화면입니다.
  • int 09h는 키보드 핸들러입니다.

여기서 공통된 주제는 인터럽트 / 시스템 호출이 호출 될 때 커널이 레지스터 상태를 확인하여 어떤 유형의 시스템 호출이 필요한지 확인한다는 것입니다. 예를 들어, eax등록하고 수행 할 작업을 결정하여 내부적으로 컨텍스트를 커널 공간으로 전환하고 프로 시저를 수행하고 컨텍스트를 다시 사용자 공간으로 전환하고 호출 결과를 반환하는 옵션을 사용합니다. 성공했거나 실패 했습니까?

참조 URL : https://stackoverflow.com/questions/12806584/what-is-better-int-0x80-or-syscall

반응형