ELF(Executable and Linkable Format) :
코드섹션에는 프로그램의 실행 코드가 저장되고, 데이터 섹션에는 초기화된 변수와 상수 데이터가 저장됩니다. 읽기 전용 데이터 섹션에는 읽기만 가능한 상수 데이터가 저자오디며, BSS섹션에는 초기화되지 않은 전역 변수와 정적 변수가 할당됩니다.섹션 헤더는 각 섹션의 속성과 위치 정보를 제공하고, 프로그램 헤더는 ELF 파일이 로드될 때 운영 체제에 의해 어떻게 처리되어야 할는지를 정의합니다.Main goal
Origin : system call handler table is empty.
After modification :
system call handler 실행
Address Validation
실행할 파일의 이름과 인자를 커맨드라인에서 받아서 strtok_r이라는 함수를 통해 띄어쓰기 기준으로 잘라서 token을 생성해 주고 그 token을 user_stack에 저장해준다.

이 그림은 입력을 "bin/ls -l foo bar"로 줬을 때 user_stack에 저장되는 것을 그림으로 보여준다.
1. 우선 각 token을 넣어주는데 입력기준 오른쪽 부터 넣어준다.(컨벤션 때문.)
2. 그 후 word-align을 맞춰준다. 여기서는 2바이트씩 맞춰준다.
3. 그 후 각 토큰에 대응되는 주소값을 넣어주고 마지막에 return address(fake address)로 0을 넣어준다.
file descriptor table
file descriptor(파일 식별자, 포인터형 변수)를 저장하는 테이블. file descriptor는 int형 변수로 0~63까지 주어진다.

0: 표준 입력
1: 표출 출력
핀토스에서는 2부터 file을 넣어준다.
system calls and handlers
system handler를 통해 system call을 제어할 수 있다.
파일과 관련된 system call
- create, remove, open, filesize, read, write, seek, tell, close,
그 이외에도 fork, wait, exit, halt등이 있다.
reference
핀토스 카이스트 자료
핀토스 한양대 자료