리눅스 fork 함수 호출

2018. 12. 15. 18:04OS/리눅스

반응형


1. 사용자 프로그램에서 fork()를 호출


2. C언어 라이브러리(libc)에서 fork()를 실행


3. fork() 의 시스템 호출 번호인 2번을 eax 레지스터에 저장하고 int $0x80을 실행하여 인터럽터 80번을 발생


4. IDT 테이블에서 0x80번째 항목을 찾음


5. 0x80 번째에 system_call() 함수의 위치가 저장되어 있기 때문에 함수를 실행


6. syetem_call() 함수는 어셈블리에서 ENTRY(system_call)로 정의


7. fork() 함수를 실행했을 때 C 라이브러리에서 eax 레지스터에 값을 저장


8. [call *sys_call_table(,%eax, 4)]에서 eax 레지스터에 저장된 값 -fork의 시스템 호출 번호는 2번을 이용해서 sys_call_table에서 2번째 함수를 찾음


9. 해당 함수는 sys_fork() 이기 때문에 sys_fork() 가 실행


10. fork() 는 실행결과에 따라서 반환값을 갖지만, 커널 영역과 사용자 영역은 값을 마음대로 주고 받을 수 없기 때문에 eax레지스터에 담아서 사용자 영역에 돌려줌

반응형

'OS > 리눅스' 카테고리의 다른 글

centos 7 apm yum install  (0) 2018.12.18
linux kernel upgrade  (0) 2018.12.16
vi 편집기 분할 사용 / 외부 명령어 사용  (0) 2018.11.20
TLS_packet export certificate  (0) 2018.09.30
리눅스 시스템 PDT -> KST 타임존 변경  (0) 2018.09.30