"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

나는 읽었다여기뒤의 인수 rdxesi, edi, ebp(또는 x64의 경우 rsi, rdi, rbp)이며 이에 대한 문서는 없습니다.Wikipedia의 호출 규칙 페이지, 하지만정수 80시간Windows도 이 규칙을 사용한다는 것을 나타내는 것 같습니다.

이 계약의 이름은 무엇입니까? Linux 커널 소스 코드에서 해당 정의를 어디에서 볼 수 있나요? 그리고 rax호출할 때 구문 분석 절차에 대한 테이블은 어디에 있습니까 int 0x80? syscall에 대해서는 sys_writerax=1

답변1

귀하의 질문은 많은 주제를 다루고 있으며 모든 주제를 다루도록 노력하겠습니다.

  1. SYSENTER시스템 호출을 호출하는 특정 방법( 또는 대신 인터럽트 0x80)은 물론이고 시스템 호출이 호출되는 방식에 대한 단일 표준 용어가 있는지 잘 모르겠습니다 SYSCALL. x86-64에서는파일에 기록하다사용된 시스템 호출 인터페이스는 System V x86-64 ABI에 설명되어 있지만 SYSCALL이는 규범적이라기보다는 정보 제공용입니다. 마찬가지로, "i386 Linux 커널 ABI"("i386"을 당신이 말하는 아키텍처로 대체)라고 부르면 대부분의 사람들이 무슨 말을 하는지 이해하겠지만, ""커널 ABI"" 때문에 혼란스러울 수도 있습니다. (커널 모듈의 맥락에서) 또 다른 의미를 가지며 이는 인터럽트 0x80으로 제한되지 않습니다.

    실제로 대부분의 사람들은 어쨌든 이 세부 수준에 관심을 가져서는 안 됩니다. 특히 인터럽트 0x80 SYSCALL등이 진화할 수 있기 때문입니다. 그리고 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 32비트에서 64비트로 변경된 이유는 무엇입니까?). 다이어그램과 함께 좋은 요약이 있습니다.calling.h.

참고로, 기록 비교에서는 일반적으로 주로 다음을 사용하는 MS-DOS 호출 인터페이스를 참조합니다.인터럽트 0x21;또한 다중화된 인터럽트도 포함합니다.0x2F, 이는확장 가능한 메커니즘시스템 서비스를 추가하는 데 사용됩니다(일반적으로 TSR과 관련되며 장치 드라이버는 대부분 다른 인터페이스를 사용합니다).

관련 정보