■ 컴파일이 끝난 어셈블리 코드는 as에 의해 기계어(바이너리)로 어셈블 된다.


(1) 오브젝트 파일 구조
: 오브젝트 파일이나 실행파일은 그 자체로서 링커나 로더에게 정보를 제공해야만 링킹하고, 로드하고, 실행할 수 있는
  것이다. 그러기 위해 바이너리파일은 일정한 규칠을 가지는 구조로 되어있어야 하고, 바이너리 스스로 정보를 제공할 수
  있어야 한다.

- 유닉스 계열의 바이너리 포맷으로는 ELF가 대표적이다.
※ as에 의해 생성되는 재배치 가능한 ELF 포맷으로 되어있는 바이너리 파일은 다음과 같은 구조를 가지고 있다.



- .text : 텍스트 섹션으로, c파일의 인스트럭션이 들어있는 부분
- .data : 데이터 섹션으로, c파일의 데이터가 들어있는 부분
- .bss : BSS섹션은 초기값이 0인 전역변수에 할당되는 공간
- .rodata : "I like you.\n"처럼 변하지 않는 데이터들의 공간(읽기전용 데이터 공간)


(2) ELF 헤더
: as는 오브젝트 파일의 제일 처음에 ELF(Executable and Linking Format) 헤더를 붙인다. ELF 헤더에는 바이너리의
  특징을 결정짓는 엔디안, 운영체제, CPU의 정보와 함께 바이너리 내부에 있는 각 구역의 시작 위치와 크기 정보
  들어있다.

명령어 gcc -c 파일명 으로 .o파일 생성 후 readelf -a 파일명 로 오브젝트 파일의 ELF헤더 정보를 확인할 수 있다.


(3) ELF 헤더정보




(4) Symbol Table 정보



(5) RelocationELF 헤더정보


 

(6) 파일 전체의 내용(구조)


by 민트앤라떼 2012. 1. 10. 15:27