시스템 콜 추가 에 관해서 여쭤볼게 있습니다.:)
제가 시스템 콜을 추가 하는걸 연습하다가 문뜩 이런 궁굼해져서요..
사실 시스템 콜을 추가했던게 책보고 따라했던 거라서 제데로 이해못하고 그냥 흉내만 하는가 싶어서요..;;
ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork)
.long SYMBOL_NAME(sys_read)
.long SYMBOL_NAME(sys_write)
.long SYMBOL_NAME(sys_open) /* 5 */
.long SYMBOL_NAME(sys_close)
.long SYMBOL_NAME(sys_waitpid)
.long SYMBOL_NAME(sys_creat)
.long SYMBOL_NAME(sys_link)
.long SYMBOL_NAME(sys_unlink) /* 10 */
.long SYMBOL_NAME(sys_execve)
.long SYMBOL_NAME(sys_chdir)
혹시 이부분에서 저 .long SYMBOL_NAME 이 무엇을 뜻하는지 아세요 ?^^?
.long SYMBOL_NAME >>대략 심볼 네임은 이해하겠는데요.. 상직적이름..핫.^^; 그런데 저 .long은 뭘까요? 저것도 그냥 unistd.h에 등록할때 앞에 sys_가 예전부터 전해내려오던거라 의미없이 붙는건가요?
일단 주변에 책이 없어서 확실친 않겠지만요,저도 .long의 의미
일단 주변에 책이 없어서 확실친 않겠지만요,
저도 .long의 의미는 잘 모르겠으나. (여태껏 신경을 안써서 그런건지, 알았는데 까먹은 건지)
혹시 인터럽트 번호를 지칭하는 type이 아닐까 합니다. (사견)
sys_ 라는 접두사는 시스템 콜에 관용적으로 붙이는 것이라기 보다는
필수적으로 붙이는 것이라는 말이 좀 더 정화한 것 같군요.
예를들어 fork(2) 를 했을 경우, 결국 시스템콜 테이블 상의 sys_fork에만 대응이 되는 것이죠.
기억이 가물가물 :oops:
아무튼 확실한 건, 아래의 책에 모든 해답이 나와 있다는 것이지요. :lol:
O'Reilly
Understanding the Linux Kernel
By Daniel P. Bovet, Marco Cesati
.long SYMBOL_NAME(sys_chdir) .long 은
.long SYMBOL_NAME(sys_chdir)
.long 은 long 타입을 1개 선언하겠다는 의미. 즉 포인터하나크기를 잡겠다는거고
그 값은 SYMBOL_NAME(sys_chdir) 이런걸 쓰겠다는 의미.
SYMBOL_NAME(sys_chdir)은 sys_chdir이라는 symbol을 사용하는 녀석의
주소를 가져온다는 의미. 즉 이경우는 sys_chdir이라는 함수의 시작주소를
의미하지요. 결국 전체적으로 syscall entry부터 순서대로 각각 함수들의 주소를
적어놓게자는소리지요.
RTFM 어셈블러 메뉴얼보면 이정도는 다 나와있습니다.
정말 감사합니다 .:)
큰 도움이 되었습니다 .:) 감사합니다 ..
^^*
모든 OS를 사용해보자~!!
-놀고먹는백수가 되고 싶은 사람-
댓글 달기