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와의 호환성     불러 _개요        # 프로그램 종료 

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b "The C Runtime Initialization, crt0.o". embecosm.com. 2010. Retrieved 2013-12-30.
  2. ^ "Program initialization: Creating a C library". osdev.org. 2014-02-25. Retrieved 2014-04-21.
  3. ^ "Calling Global Constructors". osdev.org. 2014-04-08. Retrieved 2014-04-21.
  4. ^ "Compiling a Program for Profiling: GNU gprof". sourceware.org. Retrieved 2013-12-30.

외부 링크