FreeBSD의 시스템 콜(SystemCall) 질문 입니다.
글쓴이: neobug / 작성시간: 수, 2003/12/03 - 1:41오후
Linux의 시스템 콜
아규먼트를 일단 스택에 넣어주고 시스템 콜 함수를 호출 한 다음에
ax에 시스템콜 index를, bx~dx 까지는 인자를 스택으로부터 읽어
들여온 후, 소프트웨어 인터럽트로 커널모드에 들어가는 걸로 알고 있습니다.
그러면 FreeBSD의 경우엔 어떻게 되는지 gdb를 이용해 알아보니
일단 아규먼트를 스택에 차곡차곡 넣고서는 함수를 호출......
호출된 함수 안을 들여다 보면 레지스터 이용 이라곤 ax 하나 밖에 없네요.
물론 ax에는 FreeBSD에 정의된 시스템 콜 index를 넣는 레지스터구요.
추측하기론 호출된 함수는 호출한 함수가 아규먼트라고 스택에 넣어버린
값들을 바로 스택에서 긁어와 사용하는게 아닐까 생각되는데...맞는지 모르겠
습니다.
이에 대한 정확한 지식을 알고 계신분은 조금 도와주십시요.
Forums:
Re: FreeBSD의 시스템 콜(SystemCall) 질문 입니다.
맞습니다. 8) sys/i386/i386/exception.s에 보면 int0x80_syscall라는 루틴이 있는데 거기가 시스템콜 진입점이고 trap.c에 있는 syscall2가 실제 시스템콜을 호출하는 루틴입니다.
한국 BSD 사용자 포럼
댓글 달기