CSAPP/7장 링커 3

[CSAPP] 7.9 실행 가능 목적 파일(Executable Object Files)

들어가며리눅스에서 프로그램을 실행한다는 것은 단순히 저장장치에 있는 바이너리 파일을 읽어 들이는 것만을 의미하지 않습니다. 커널은 ELF 포맷의 실행 파일을 해석해, 필요한 부분만 골라 메모리에 올리고, 프로그램이 안전하게 돌아갈 수 있도록 다양한 초기화 작업을 수행하죠. 이번 글에서는 “실행 가능(executable) 상태”가 되기 위해 반드시 충족해야 하는 세 가지 핵심 조건을 짚어 보고, 링킹과 실행의 전체 흐름을 함께 살펴보겠습니다.링킹과 실행: 전체 흐름 요약아래 흐름도는 소스코드 작성 → 컴파일·어셈블 → 링킹 → ELF 파일 구조 정리 → 실행 시 로딩의 전 과정을 한눈에 보여줍니다.1. 소스코드 작성 (e.g. main.c, sum.c) • C 언어로 프로그램을 작성 • 고급 언어 ..

CSAPP/7장 링커 2025.04.23

[CSAPP] 7 링킹(Linking) - 7.8 ~ 7.15

7.8 실행 가능한 목적 파일(Executable Object Files)링커의 마무리 작업 : 실행 파일 만들기앞서 우리는 여러 개의 목적 파일(.o)을 링커가 하나의 실행 파일로 합치는 과정을 살펴봤습니다. 이 과정을 비유하자면, 각각의 목적 파일이 '부품'이라면, 링커는 이 부품을 조립하여 하나의 완성된 로봇을 만드는 작업자라고 할 수 있습니다.이렇게 완성된 실행 파일은 단순한 텍스트가 아니라, 운영체제가 메모리에 올려서 직접 실행할 수 있는 바이너리 파일이 됩니다. 리눅스에서는 이를 ELF (Executable and Linkable Format) 파일이라 부릅니다.ELF 파일 구조ELF 실행 파일은 아래와 같은 주요 요소들로 구성되어 있습니다.ELF 헤더파일의 시작 지점에 위치이 파일이 어떤 아..

CSAPP/7장 링커 2025.04.18

[CSAPP] 7 링킹(Linking) - 7.1 ~ 7.7

링킹(Linking)이란 여러 개의 오브젝트(코드, 데이터) 조각들을 모아 "메모리에 복사해 즉시 실행 가능한 하나의 파일"로 만드는 과정입니다. 언제 일어나는가?Compile time: 컴파일러 드라이버가 ld 등을 호출할 때Load time: OS loader가 실행 파일을 메모리에 매핑할 때Run time: 애플리케이션이 dlopen() 등으로 공유 라이브러리를 불러올 때이 과정을 통해 분할 컴파일(separate compilation) 이 가능해집니다. 모듈 하나만 수정해도 전체를 다시 빌드할 필요 없이 해당 모듈만 재컴파일 → 재링크하면 되죠.Linking을 배워야 하는 이유대규모 소프트웨어 개발 지원모듈·라이브러리 간 버전 불일치, 누락된 객체로 인한 링커 에러 해결에 필수“왜 이 심볼을 못 ..

CSAPP/7장 링커 2025.04.17