프로세스의 메모리 레이아웃과 관련하여 프로세스 내의 모든 함수 호출은 새 스택 프레임을 스택에 넣습니다.
진입점 기능 이상의 기능을 수행하는 것처럼 main
보이기 때문에 이것이 함수에 맞는지 확실하지 않습니다 .main
main
새 프로세스가 초기화되면 함수도 자체 스택 프레임을 얻나요?
이것이 구현별 세부 사항인 경우 일반적인 Linux 구현에 대한 설명이 유용할 것입니다.
답변1
일반적 _start
으로 주요 지점보다는 진입 지점입니다.
main
에 의해 호출되는 또 다른 서브루틴입니다 _start
. 다른 서브루틴과 마찬가지로 스택에 스택 프레임을 가져옵니다.
그러나 커널은 생각만큼 많은 일을 하지 않습니다. 프로세스에는 _start
많은 작업을 수행하는 main(C 컴파일러에 의해 생성되지만 C 프로그램의 일부가 아님) 이전에 실행되는 일부 코드가 있습니다. setup 및 와 exec
같이 이전에 실행되었던(C 프로그램이 실행되기 전) 코드도 있습니다 .stdin
stdout
stderr
커널은 _start
다른 서브루틴처럼 실행되지 않도록 몇 가지 트릭을 사용할 수 있지만 이는 다음과 같습니다. 커널은 프로세스가 _entry
방금 호출된 것처럼 프로세스를 설정합니다(그러나 그렇지 않습니다). 제어가 다시 전달되면 _start
다음 exit
이 호출됩니다.
(포함된 일부 세부 사항을 얼버무렸을 수도 있습니다 _entry
).