`int 0x80` 뒤에 있는 호출 규칙을 무엇이라고 부르나요?

`int 0x80` 뒤에 있는 호출 규칙을 무엇이라고 부르나요?

규칙 이 있다는 건 알지만 , 이와 같이 를 호출 syscall할 때 표시되는 호출 규칙을 무엇이라고 부르나요 ?int 80syscall

mov  rax,4     ; system call number (sys_write)
mov  rbx,1     ; file descriptor (stdout)
mov  rcx,hello ; message to write
mov  rdx,12    ; message length
int  0x80      ; call kernel

나는 읽었다여기뒤의 인수는 , , (또는 x64의 경우 , , ) rdx입니다 . 문서에 문서화되어 있지 않습니다.esiediebprsirdirbp호출 규칙에 대한 Wikipedia 페이지, 하지만int80hWindows도 이 규칙을 사용한다는 것을 나타내는 것 같습니다.

이 관례적인 이름은 무엇입니까? Linux 커널 소스의 어디에서 정의된 것을 볼 수 있습니까? 그리고, rax전화했을 때 절차를 해결해주는 테이블은 어디에 있나요 int 0x80? 의 syscall경우 sys_writerax=1

답변1

귀하의 질문은 다양한 주제를 다루고 있습니다. 저는 그 주제를 모두 다루려고 노력할 것입니다.

  1. SYSENTER시스템 호출이 호출되는 방식에 대한 단일 표준 용어가 있는지 확실하지 않으며, 시스템 호출이 호출되는 특정 방식( 또는 대신 인터럽트 0x80 SYSCALL)에 대해서는 더욱 그렇습니다. x86-64에서는문서화를 사용하는 시스템 호출 인터페이스는 SYSCALLSystem V x86-64 ABI에 설명되어 있지만 이는 참고용일 뿐 규범적이지는 않습니다. 마찬가지로, “i386 Linux 커널 ABI”(“i386”을 귀하가 말하는 아키텍처로 대체)라고 하면 대부분의 사람들이 귀하가 말하는 내용을 이해하지만 “커널 ABI” 때문에 혼란스러울 수도 있습니다. (커널 모듈의 맥락에서) 또 다른 의미를 가지며, 이는 인터럽트 0x80으로 제한되지 않습니다.

    실제로 대부분의 사람들은 어쨌든 이 세부 수준까지의 세부 사항에 대해 걱정해서는 안 됩니다. 특히 진화할 수 있기 때문입니다. SYSCALL언급한 대로 인터럽트 0x80 등은 물론 자체 미묘함을 도입하고 선호하는 진입점인 vDSO도 마찬가지입니다. 요즘 x86의 모든 시스템 호출에 대해... 물론 이것이 특정 호출 규칙을 지칭하는 용어가 있을 수 없다는 의미는 아니지만 그것이 그렇게 유용할지 확신할 수 없습니다.

  2. Windows는 또한 시스템 호출 인터페이스인 0x2E에 대한 인터럽트 사용을 지원하지만 "호출 규칙"은 다음과 같습니다.꽤 다르다: 인수는 스택에 푸시되고, 요청된 시스템 호출은 EAX에 의해 제공되며, EBX는 스택의 인수를 가리킵니다.

  3. 현재 x86 커널은 시스템 호출 인터페이스를 다음과 같이 정의합니다.arch/x86/entry:entry_32.Si386 인터페이스가 포함되어 있습니다.entry_64.Sx86-32 및 x86-64 인터페이스,entry_64_compat.S32비트 x86-64 인터페이스(이전 버전과의 호환성을 위해)syscalls/syscall_32.tbli386 시스템 호출 테이블,syscalls/syscall_64.tblx86-32 및 x86-64 시스템 호출 테이블.

    해당 파일의 주석은 인터페이스, 특히 인수가 전달되는 방식을 문서화합니다. 32비트 호출의 경우 EAX에는 시스템 호출 번호가 포함되어 있으며 해당 매개변수는 EBX, ECX, EDX, ESI, EDI 및 EBP(매개변수 에 대한 자체 SYSENTER, 인터럽트 0x80에 대한 매개변수를 포함하는 사용자 스택에 대한 포인터); 64비트 호출의 경우 RAX에는 시스템 호출 번호가 포함되어 있으며 해당 매개변수는 RDI, RSI, RDX, R10, R8 및 R9에 있습니다(참조:시스템 호출 레지스터와 순서가 Intel 32bit에서 64bit로 변경된 이유는 무엇입니까?). 다이어그램과 함께 멋진 요약이 있습니다.calling.h.

참고로 과거 비교에서는 주로 MS-DOS 호출 인터페이스를 참조하는 경우가 많습니다.인터럽트 0x21; 다중 인터럽트도 포함되어 있습니다.0x2F, 이는확장 가능한 메커니즘시스템 서비스 추가(일반적으로 TSR 관련, 장치 드라이버는 대부분 다른 인터페이스를 사용함)

관련 정보