시스템 콜을 공부하다가 궁금한 점이 생겨서 질문드립니다.
시스템콜을 하면 인터럽트가 발생해서 IDT에서 인터럽트 참조하고 인터럽트가 시작되면
call *SYMBOL_NAME(sys_call_table)(,%eax,4)
이런 코드에 따라 시스템콜 테이블을 참조하는 방식이 달라지는데
%eax에는 시스템콜 호출번호가 들어 있는데 그 옆에 4번은 무엇을 뜻하는 것인지 궁금합니다.
감사합니다~~ ^^
IA-32에서 near call에 대한 pointer는 4 byte 크기이므로 function pointer의 array를 접근하려면 어셈블리 언어에서는 index * 4를 해 주어야 합니다. 따라서 %eax의 system call 번호에 4를 곱하여 sys_call_table의 원소에 접근하는 것입니다.
아~ 포인터의 크기 이군요~~ ^^
답변 감사합니다 ^^
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
(,%eax,4)는 [eax * 4]의 의미입니다.
IA-32에서 near call에 대한 pointer는 4 byte 크기이므로 function pointer의 array를 접근하려면 어셈블리 언어에서는 index * 4를 해 주어야 합니다. 따라서 %eax의 system call 번호에 4를 곱하여 sys_call_table의 원소에 접근하는 것입니다.
감사합니다. ^^ 이해가 가네요 ~
아~ 포인터의 크기 이군요~~ ^^
답변 감사합니다 ^^
댓글 달기