어셈블리코드를 기계어로 변환시킨것을 오브젝트 코드라 하고, 오브젝트 코드로 구정된 파일을 오브젝트 파일(Object File)이라 부르며, 오브젝트 파일은 특정한 파일 포맷을 가짐
*Windows의 경우 PE(PortableExecutable) / Linux의 경우 ELF(Executable and Linking Format)
(재배치 가능한 오브젝트 파일)
하나의 파일을 컴파일하였을 때 나오는 일반적은 오브젝트 파일
실행가능한 오브젝트 파일을 만들기 위한 재배치 가능한 심볼정보들을 갖고 있음
(실행가능한 오브젝트 파일)
링커가 여러개의 오브젝트 파일들을 연결시켜서 만들어낸 실행가능한 오브젝트 파일
직접 메모리에 로드, 다운로드하여 실행될 수 있는 프로그램 파일
(공유 오브젝트 파일)
재배치 가능한 오브젝트 파일의 특별한 타입, 동적인 컨텍스트들을 링크할 수 있는 코드와 데이터를 가짐
(심볼 테이블 구역)
소스코드에서 참조되는 심볼들의 이름과 주소가 정의되어있음
but 오브젝트 파일의 심볼 테이블은 해당 오브젝트 파일의 심볼 정보만 갖고 있어야 하기 때문에, 다른 파일에서 참조되고 있는 심볼의 경우 저장할 수 없음
링커의 기본단위로 자기 자신의 주소를 가리키고
자기 자신의 주소를 가진 것(things)들을 여러 오브젝트 파일에서 가져와 링커가 묶어서 보관하고 있음
전역변수 static변수 함수 등은 자신의 주소를 갖고, 다른 소스파일에서 언제든지 접근하여 사용할 수 있음
지역변수는 일정영역이나 블록{ } 내에서만 존재했다가 소멸하기 때문에 자신의 주소를 가지지 못하여 심볼이 될 수 없음
심볼이 가지는 스스로의 메모리 시작주소를 가리키는 링커만의 포인터 변수 이름
(재배치 정보 구역)
어셈블러는 궁극적인 위치가 알려지지 않은 오브젝트에 대한 참조가 발생하면 이에 대해 “Relocation Entry”를 만들어, 링커에게 오브젝트 파일을 만들때 어떻게 재배치 해야하는지 방법을 알려줌