리눅스 system call과정중에 system call table참조
글쓴이: kyh1026 / 작성시간: 일, 2008/04/20 - 11:57오후
시스템 콜을 공부하다가 궁금한 점이 생겨서 질문드립니다.
시스템콜을 하면 인터럽트가 발생해서 IDT에서 인터럽트 참조하고 인터럽트가 시작되면
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
이런 코드에 따라 시스템콜 테이블을 참조하는 방식이 달라지는데
%eax에는 시스템콜 호출번호가 들어 있는데 그 옆에 4번은 무엇을 뜻하는 것인지 궁금합니다.
감사합니다~~ ^^
Forums:


(,%eax,4)는 [eax * 4]의 의미입니다.
IA-32에서 near call에 대한 pointer는 4 byte 크기이므로 function pointer의 array를 접근하려면 어셈블리 언어에서는 index * 4를 해 주어야 합니다. 따라서 %eax의 system call 번호에 4를 곱하여 sys_call_table의 원소에 접근하는 것입니다.
감사합니다. ^^ 이해가 가네요 ~
아~ 포인터의 크기 이군요~~ ^^
답변 감사합니다 ^^