목적 코드
목적 코드(Object Code)는 컴파일러 또는 어셈블러가 소스 코드를 변환해 얻은 코드·데이터의 결과물이다. 일반적으로 목적 파일(Object File)에 저장되며 실행 기계 명령뿐 아니라 미해결 외부 심벌과 재배치 항목, 섹션 및 디버깅 정보를 포함할 수 있다. 따라서 단일 목적...
| 영어 명칭 | Object Code |
|---|---|
| 분류 | 컴파일·어셈블의 중간 결과물 |
| 대표 형식 | ELF, COFF, Mach-O 오브젝트 |
| 생성 도구 | 컴파일러, 어셈블러 |
| 주요 정보 | 코드 섹션·데이터·심벌·재배치 항목 |
| 후속 처리 | 링커가 라이브러리·다른 목적 파일과 결합 |
| 파일 확장자 | .o, .obj 등 플랫폼별 |
| 타깃 | CPU ISA·운영체제 ABI·오브젝트 포맷 |
| 참조 | LLVM Object Files |
| ELF 표준 | System V ABI |
목적 코드(Object Code)는 컴파일러 또는 어셈블러가 소스 코드를 변환해 얻은 코드·데이터의 결과물이다. 일반적으로 목적 파일(Object File)에 저장되며 실행 기계 명령뿐 아니라 미해결 외부 심벌과 재배치 항목, 섹션 및 디버깅 정보를 포함할 수 있다. 따라서 단일 목적 파일이 곧 완성된 실행 파일이라는 의미는 아니며 링커가 여러 목적 파일과 라이브러리를 결합하는 과정이 필요한 경우가 많다.
대상 아키텍처와 운영체제·ABI에 따라 ELF·COFF·Mach-O 같은 오브젝트 형식을 사용한다. 예를 들어 Linux의 C 컴파일 과정에서는 .o 파일이 만들어지고 Windows에서는 .obj 형식이 일반적이다. 섹션에는 실행 코드·초기화 데이터·읽기 전용 상수 등이 저장되며 심벌 테이블은 다른 파일과 함수를 연결할 수 있게 한다.[1]
외부 함수의 최종 주소를 아직 알 수 없는 경우 명령어·데이터의 일부를 임시 값이나 재배치 대상으로 기록한다. 링커는 섹션과 심벌을 배치하고 다른 오브젝트 및 라이브러리의 정의를 찾아 주소를 해석한다. 동적 라이브러리를 사용하는 바이너리는 일부 심벌 해석을 실행 시간의 로더에 맡길 수 있다.
목적 코드에는 네이티브 기계어가 포함되는 일이 흔하지만 특정 플랫폼의 중간 바이트코드나 언어별 오브젝트라는 표현도 존재한다. 그래서 기술 문서에서는 기계어 명령 자체·목적 파일 컨테이너·완성 실행 파일의 단계를 구별해야 한다. 빌드 오류를 분석할 때에는 미정의 심벌, 중복 정의와 아키텍처·ABI 불일치 및 라이브러리 순서가 중요하다.