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
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
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
Recent Posts
Archive Posts
Tags