리눅스 시스템콜 예제

2019年8月3日

이 문서화 된 한 장소는 아치 / x86 / ia32 / ia32entry의 주석에 있습니다. S: * 에뮬레이트된 IA32 시스템은 int 0x80을 통해 호출됩니다. * * 인수 : * % eax 시스템 호출 번호. * %ebx Arg1 * %edx Arg2 * %edx Arg3 * % esi Arg4 * %edi Arg5 * %ebp Arg6 [참고: 스택 프레임에 저장되지 않음, 터치해서는 안된다] * 새로운 시스템 호출의 추가 속도가 느리다는 신호입니다 리눅스는 상대적으로 안정적이고 기능 완성 된 운영 체제입니다. [p83] 시스템 호출은 하드웨어와 사용자 공간 프로세스 사이의 계층을 제공하며, 이는 세 가지 주요 용도로 사용됩니다: Linux 커널은 인터럽트 번호에 대해 ia32_syscall이라는 인터럽트 처리기를 등록합니다: 128 (0x80). 실제로이 작업을 수행하는 코드를 살펴 보겠습니다. 이 장에서는 시스템 호출이 무엇인지, 라이브러리 호출 및 응용 프로그램 프로그래밍 인터페이스(API)와 어떻게 관련되는지에 대해 설명합니다. 여기에는 Linux 커널이 시스템 호출을 구현하는 방법과 시스템 호출을 실행하는 데 필요한 이벤트 체인( 커널에 트래핑, syscall 번호 및 인수 전송, 올바른 시스템 호출 함수 실행 및 반환) syscall의 반환 값을 가진 사용자 공간. [p83] 컴퓨팅에서 시스템 호출은 컴퓨터 프로그램이 실행되는 운영 체제의 커널에서 서비스를 요청하는 프로그래밍 방식입니다. 여기에는 하드웨어 관련 서비스(예: 하드 디스크 드라이브 액세스), 새 프로세스 생성 및 실행, 프로세스 스케줄링과 같은 통합 커널 서비스와의 통신 등이 포함될 수 있습니다. 시스템 호출은 프로세스와 운영 체제 간의 필수 인터페이스를 제공합니다.

리눅스 시스템 프로그래밍을 작성에 관심이 있다면, 모든 기본 라이브러리/시스템 호출을 배워야 한다. 이 문서에는 이러한 기본 라이브러리 호출의 사용을 이해하는 데 도움이 되는 시스템 호출 집합을 다루는 예제 C 프로그램이 있습니다. 아래 제공된 예제 C 코드는 다음과 같습니다: Linux의 시스템 호출과 관련된 두 가지 멋진 버그를 언급하지 않는 것은 불행한 일입니다. 이것이 바로 리눅스 가상 동적 공유 객체(vDSO)가 존재하는 이유입니다. Linux vDSO는 커널의 일부인 코드 집합이지만 사용자 랜드에서 실행할 사용자 프로그램의 주소 공간에 매핑됩니다. 시스템 호출을 구현하는 첫 번째 단계는 그 목적을 정의하는 것이며 syscall에는 정확히 하나의 목적이 있어야 합니다. 리눅스에서는 멀티플렉싱 syscalls(플래그 인수에 따라 격렬하게 다른 작업을 수행하는 단일 시스템 호출)을 권장하지 않습니다. ioctl()은 하지 말아야 할 일의 예입니다. 유닉스 세계에서 가장 일반적인 API는 POSIX를 기반으로 합니다. 기술적으로 POSIX는 대략 유닉스를 기반으로 휴대용 운영 체제 표준을 제공하는 것을 목표로 하는 IEEE의 일련의 표준으로 구성됩니다. 리눅스는 POSIX- 및 SUSv3 준수할 수 있도록 노력합니다.

이 코드는 재미있는 기본 바이러스 프로그램의 시뮬레이션입니다. 위의 c 프로그램을 컴파일하고 실행하면 다음을 수행합니다. 이 코드는 리눅스 민트에서 테스트되었습니다. 그러나, 그것은 모든 우분투 파생 상품에 작동 한다. 이 문서는 Linux에서 시스템 호출을 만들고 설치하는 경험과 직렬 포트를 제어하기 위해 하나의 인터럽트 벡터를 설치하는 방법을 기반으로 합니다. 한 가지 방법으로, 이것은이 두 가지 주제에 대한 미니 하우토입니다. Linux에서 각 시스템 호출에는 특정 시스템 호출을 참조하는 데 사용되는 고유한 syscall 번호가 할당됩니다. 사용자 공간 프로세스가 시스템 호출을 실행하면 syscall 번호는 실행된 syscall을 식별합니다. 이 프로세스는 이름으로 syscall을 참조하지 않습니다. 위의 코드 자체는 해당 시스템 호출이 수행하는 작업을 설명하는 적절한 주석을 포함하기 때문에 자명합니다.

리눅스 시스템 프로그래밍을 처음 접하는 경우 이 코드는 이러한 모든 중요한 함수의 사용에 충분히 노출됩니다. 자세한 내용 및 고급 사용에 대 한 주의 깊게 그들의 남자 페이지를 읽어 보시기 바랍니다.

カテゴリー:未分類