crt0
crt0프로그램 실행 |
---|
일반적인 개념 |
코드의 종류 |
컴파일 전략 |
주목할 만한 런타임 |
주목할 만한 컴파일러 및 툴 체인 |
crt0(c0이라고도 함)은 프로그램의 주요 함수를 호출하기 전에 필요한 초기화 작업을 수행하는 C 프로그램에 링크된 실행 시작 루틴 세트입니다.
형태와 용도
Crt0은 일반적으로 crt0.o라는 오브젝트 파일의 형식을 취합니다.이 파일은 링커에 의해 [1]빌드되는 모든 실행 파일에 자동으로 포함됩니다.
crt0에는 런타임 라이브러리의 가장 기본적인 부분이 포함되어 있습니다.따라서 이 프로그램이 수행하는 정확한 작업은 프로그램의 컴파일러, 운영 체제 및 C 표준 라이브러리 [1]구현에 따라 달라집니다.crt0은 환경 및 툴체인에 필요한 초기화 작업 외에 C++ 글로벌 컨스트럭터 및 GCC(([2][3]컨스트럭터) Atribut을 포함하는 C 함수 실행 등 프로그래머가 정의한 추가 작업을 수행할 수 있습니다.
"crt"는 "C runtime"을 나타내며, 0은 "bery beginning"을 나타냅니다.그러나 GCC를 사용하여 프로그램을 컴파일할 때는 C 이외의 언어에도 사용됩니다.특별한 사용 시나리오에서는 crt0 대체 버전을 사용할 수 있습니다.예를 들어 gprof를 사용한 프로파일링을 활성화하려면 gcrt0으로 프로그램을 [4]컴파일해야 합니다.
예: crt0.s
이 예는 실제 C 런타임 없이 AT&T 구문을 사용하는 Linux x86-64의 경우입니다.
.본문 .글로벌 _스타트 _시작: # _start는 링커에 인식된 엔트리 포인트입니다. xor %ebp, %ebp # 유효 RBP : = 0, 스택프레임의 끝을 표시합니다. 움직이다 (%rsp), %edi 스택에서 argc를 취득하는 수(대부분 64비트로 제로) 리아 8(%rsp), %rsi # 스택에서 argv 주소를 가져옵니다. 리아 16(%rsp,%rdi,8), %rdx # 스택에서 envp 주소를 가져옵니다. xor %eax, %eax ABI당 수 및 icc와의 호환성 불러 주된 # %edi 、 %rsi 、 %rdx the main3개의 arg (이 중 첫 번째 2개는 C 표준)에서 main으로 이동합니다. 움직이다 %eax, %edi # main의 반환을 _in의 첫 번째 인수에 전송한다. xor %eax, %eax ABI당 수 및 icc와의 호환성 불러 _개요 # 프로그램 종료
「 」를 참조해 주세요.
레퍼런스
- ^ a b "The C Runtime Initialization, crt0.o". embecosm.com. 2010. Retrieved 2013-12-30.
- ^ "Program initialization: Creating a C library". osdev.org. 2014-02-25. Retrieved 2014-04-21.
- ^ "Calling Global Constructors". osdev.org. 2014-04-08. Retrieved 2014-04-21.
- ^ "Compiling a Program for Profiling: GNU gprof". sourceware.org. Retrieved 2013-12-30.
외부 링크
- crt0.o vs crt1.o
- Linux x86 프로그램 부팅
- 립이 없는 세상에서 안녕! (1부) 2010년 3월 16일
- glibc x86_64 가 기동합니다.s