Linux 커널 exec의 시스템 호출 #! 인식 shebang 지정.
#! 사람이 읽기 편하도록 구성한다는 의미(스크립트 언어)
./something
리눅스 커널 소스
linux/fs/binfmt_script.c
if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
바이트를 읽은 후 비교.
참이면 커널에서 파싱.
경로 /usr/bin/env python 첫 번째 인수 사용하여 또 다른 exec 호출 생성.
/usr/bin/env python /path/to/script.py
#주석 문자 사용하는 모든 스크립팅 언어에서 동작 함.
무한 루프도 만들 수 있음.
printf '#!/a\n' | sudo tee /a
sudo chmod +x /a
/a
bash 오류 인식
-bash: /a: /a: bad interpreter: Too many levels of symbolic links
ELF 실행 파일
linux/fs/binfmt_elf.c
magic.elfmag[EI_MAG0] = ELFMAG0;
바이트 검사. 7f 45 4c 46, 사람이 읽을 수 있으나 이해 하려면 시간이 걸림.
EFL 형식의 파일을 읽고, 메모리에 정확하게 넣고, 새로운 프로세스 시작.
댓글 없음:
댓글 쓰기