Bash에서 ELF 파일을 실행하는 방법은 무엇입니까?

Bash에서 ELF 파일을 실행하는 방법은 무엇입니까?

Linux Box를 사용할 때 bash를 셸로 사용합니다. 이제 bash가 ELF 파일 실행을 어떻게 처리하는지 알고 싶습니다. 즉, ./program을 입력하면 프로그램이 ELF 파일입니다. bash-4.3.tar.gz를 grep했는데 파일이 ELF인지 알아내는 일종의 마법 파서가 없는 것 같고 exec() 시스템 호출도 찾지 못하는 것 같습니다.

전체 과정은 어떻게 진행되나요? Bash는 ELF 실행을 운영 체제에 어떻게 전달합니까?

답변1

Bash는 ELF에 대해 아무것도 모릅니다. 단지 외부 프로그램을 실행하라고 요청한 것을 보고 지정한 이름을 그대로 전달합니다.execve(2). 실행파일 형식 등의 지식을 이해하고,셰르본 라인, 실행 권한이 그 뒤에 있습니다시스템 호출, 커널에서.

(다른 쉘에도 동일하게 적용되지만 사용하도록 선택할 수 있습니다.exec(3)하지만 가족. )

Bash 4.3에서는 5195행에서 이런 일이 발생합니다.execute_cmd.cshell_execve()기능 에서 .

소스 코드 수준에서 Linux를 이해하고 싶다면 사본을 다운로드하는 것이 좋습니다.Unix V6 또는 V7 연구, 그리고 통과저것최신 Linux 시스템에서 발견되는 모든 복잡성 대신.사자의 책코딩에 대한 좋은 가이드입니다.

V7은 어디에 있나요?본 쉘데뷔. 전체 C 소스 코드는 Bash의 C 파일 크기의 절반을 조금 넘습니다. 이것톰슨 쉘V6의 크기는 원래 Bourne 쉘 크기의 거의 절반입니다. 그러나 이 두 가지 간단한 쉘은 모두 Bash와 동일한 작업을 수행하며 동일한 이유도 있습니다. (이것은 Thompson 쉘에서의 호출 execv(2)과 Bourne 쉘 모듈에서의 호출인 것으로 보입니다.)texec()execve()execs()service.c

관련 정보