Armv8 시스템 콜

EEEFFEE·2023년 11월 30일
0

Armv8 Architecture

목록 보기
10/15

23.11.29 최초 작성

운영체제에서 유저 모드에서 커널모드로 진입하는 동작

1. 시스템 콜의 흐름

  1. 표준 함수 호출 (open, read, write)
  2. 시스템 콜 실행
    (x08 레지스터에 시스템 콜 번호 저장하고 svc 0x0 실행)
    (svc : EL0 Synchronous에 해당하는 Exception Vector로 분기)
  3. 시스템 콜 핸들러 호출
  4. 시스템 콜 핸들러 실행

1.1 주요 레이블 함수

  • VBAR_EL1 + 0x400 : EL0 익셉션 벡터 테이블로 분기, el0t_64_sync()호출

  • el0t_64_sync() : 일반 레지스터의 내용을 stack공간에 저장, 돌아올 주소 공간 link register에 저장, el0t_64_sync_handler()호출

  • el0t_64_sync_handler() : 익셉션 신드롬 레지스터(?) 정보를 읽어 익셉션 유발 세부 정보에 따라 실행할 함수를 호출

    • el0_svc() : EL0에서 호출된 경우 호출되는 함수, do_el0_svc() 호출
    • do_el0_svc() : x8레지스터 값을 참고해el0_svc_common() 호출
    • el0_svc_common() : 레지스터, 시스템 콜 번호, 시스템 콜 테이블 주소값을 참고해 invoke_syscall() 호출

시스템 콜 번호는 unistd.h에 표기되어 있음

0개의 댓글