Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

시스템 콜 테이블

B.3. 시스템 콜 테이블

0x80 트랩 핸들러는 모든 시스템 콜에의해 불려지고 이 핸들러는 불려질 당시의 시스템 콜 번호를 가지고 해당 시스템 콜을 시스템 콜 테이블에서 찾아 실행해 준다.

모든 시스템 콜의 번호는 $(TOPDIR)/include/asm/unistd.h에 정의되어 있다.

  • #define __NR_exit 1

  • #define __NR_fork 2

  • #define __NR_read 3

  • ...

  • #define __NR_vfork 190

시스템 콜 테이블은 $(TOPDIR)/arch/i386/kernel/entry.S에 정의되어 있고 각 시스템 콜의 주소가 연속되게 적혀져 있다.

  • .long SYMBOL_NAME(sys_ni_syscall)

  • .long SYMBOL_NAME(sys_exit)

  • .long SYMBOL_NAME(sys_fork)

  • .long SYMBOL_NAME(sys_read)

  • ...

  • .long SYMBOL_NAME(sys_vfork)

  • .rept NR_syscalls-190

그림 B-2은 fork()가 실행될 때의 흐름을 나타낸 그림으로 이해에 도움을 줄 수 있을 것이다.

그림 B-2. fork()가 실행될 때의 흐름

attachment:fork-system-call.png