syscall.sh - Linux 시스템 호출 웹사이트와 API 업데이트

6 hours ago 4

syscall.sh는 Linux 3.3부터 7.3까지 27개 아키텍처의 시스템 호출 번호, 인자, 레지스터 정보를 한곳에 모아 제공함 아키텍처별 호출 규약을 제공해 시스템 호출 번호와 인자를 어디에 넣고 어떤 명령어로 커널에 진입하는지 확인할 수 있음 커널 버전 선택기로 릴리스별 테이블을 조회하고, 제거된 시스템 호출과 제거 시점도 확인할 수 있음 아키텍처별 전체 이력을 JSON으로 내려받을 수 있으며, API는 커널 릴리스별 조회와 릴리스 간 차이 조회를 지원함 호출 번호와 인자 정보는 커널 소스에서 추출함. 다만 최초 스캔 버전과 since가 같다면 실제 도입 시점은 그보다 오래됐을 수 있음 아키텍처별 시스템 호출 테이블 27개 아키텍처의 시스템 호출을 아키텍처별로 묶어 제공하며, 전체 데이터 범위는 Linux 3.3부터 7.3까지임 각 테이블에서 시스템 호출 번호, 인자, 레지스터를 확인할 수 있음 아키텍처별 테이블은 /<arch>/syscalls.json 형태의 일반 JSON 파일로도 제공하며, 각 호출의 등장과 제거 이력을 담고 있음 예: x64 시스템 호출 JSON 호출 규약 확인 호출 규약 표는 아키텍처별 커널 진입 명령어와 시스템 호출 번호용 NR, 인자용 ARG0~ARG5, 반환값용 RETURN 위치를 제공함 번호와 인자를 지정된 위치에 넣고 해당 명령어를 실행하면 결과가 RETURN 위치로 돌아옴 대표적인 아키텍처의 호출 방식은 다음과 같음 x64: syscall을 사용하며 번호와 반환값은 rax, 인자는 rdi, rsi, rdx, r10, r8, r9에 둠 x86: int 0x80을 사용하며 번호와 반환값은 eax, 인자는 ebx, ecx, edx, esi, edi, ebp에 둠 arm64: svc #0을 사용하며 번호는 x8, 반환값은 x0, 인자는 x0~x5에 둠 riscv64: ecall을 사용하며 번호는 a7, 반환값은 a0, 인자는 a0~a5에 둠 인자 위치가 모두 레지스터인 것은 아님. mipso32는 다섯 번째와 여섯 번째 인자를 각각 sp+16, sp+20에 둠 API와 커널 버전별 이력 API로 개별 시스템 호출을 조회할 수 있으며, x64의 read 조회 예시는 curl https://api.syscall.sh/v2/syscalls/x64/read임 커널 릴리스별 조회와 릴리스 간 차이 조회 등은 API 문서에서 확인할 수 있음 시스템 호출 항목은 릴리스 사이에 ...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵