Building and Loading Programs
컴파일러
어떤 프로그래밍 언어로 작성된 컴퓨터 코드를 다른 언어로 번역해주는 프로그램
ex)Python to C compiler
C 컴파일러는 C 코드를 기계어로 번역한다
유명한 C 컴파일러들
GNU C Complier
Clang
단일 소스파일
$ gcc file.c
$ ./a.out //a.out은 기본 프로그램 이름
$ gcc -o prog file.c 프로그램 이름을 명료화하기 위한 -o 옵션
$ ./prog
다중 소스파일
$ gcc -c file1.c
$ gcc -c file2.c -c:링킹 x,C 파일들을 오브젝트 파일로 컴파일한다
$ gcc -c file3.c
$gcc -o prog file1.o file2.o file3.o 사용자 오브젝트 파일과 시스템 파일들을 함께 연결해 실행 가능한 파일을 만든다
$ ./prog
프로세스 빌드의 3단계 과정
Preprocessing(전처리 과정)
주석 삭제
헤더 파일을 소스파일 내에 include(포함)해준다
메크로 포함
조건부 compilation
Line control
Compiling
전처리된 소스 파일들을 오브젝트 파일로 변환한다
오브젝트 파일
CPU-의존하는 기계어로 쓰여진다
다른 CPU구조에서 사용 불가능(ex:intel사의 오브젝트 파일은 ARM사의 오브젝트 파일에서 사용 불가능)
인스트럭션(명령), 데이터 모두를 포함한다
컴파일러 최적화 옵션
특정 코드 일반화 정책을 지시하기 위해 -o 옵션이 사용된다
Linking
오브젝트 파일(CRT 와 libc 포함)들을 실행 가능한 파일로 결합한다
-각각의 오브젝트 파일들은 다른 오브젝트 파일들에 호출과 접근을 가진다
-그들 사이 연결이 만들어저야 한다
CRT는 메인함수라 불리는 초기화 코드를 가진다
Standard C library(libc)는 printf,scanf 등에 대한 일련의 오브젝트 파일들이다
실행 파일
명령어와 데이타가 많은 오브젝트 파일들로부터 연결되었다
실행되었을 때,CRT의 전체 함수들이 OS에 전달된다
각각 OS마다 파일 형식들이 다르다
GNU Binutils
바이너리 파일들을 다루는 유틸리티들(오브젝트 파일들과 실행 가능한 파일)
$ objdump -s file.o 전체 목록을 보여준다
$ objdump -D file.o 분산된 어셈블리 언어를 보여준다
프로그램 로딩
파일의 텍스트와 데이터 요소들을 메모리로 복사한다
초기화되지 않은 전역변수들에 BSS를 할당하고 제로화한다
동적 메모리를 위한 힙을 준비한다
지역 변수와 함수 호출을 위한 스택을 준비한다
메모리 내 프로그램
변수와 함수들은 주소 공간에 그들 자신의 영역을 가지고 있다
Author And Source
이 문제에 관하여(Building and Loading Programs), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tlsrhksdn/Building-and-Loading-Programs저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)