2012-04-23 3 views
1

대부분 특정 컴퓨터의 기계 언어의 상징적 등가물의GAS와 같은 어셈블러는 왜 바이너리 이상을 출력합니까? 백과 사전 Britanica 어셈블리 언어에 따르면

입니다.

이것이 사실이라면 헤더가있는 GAS 출력 파일과 같은 어셈블러를 사용해야합니까?

ELF/Mach-O/PE 헤더가 "기계어"가 아닌 것으로 확신합니다.

그래서 왜 안 어셈블러단지 어셈블리 언어를 조립하고 링커까지 바이너리 포맷 떠날 수 있습니까?

답변

2

문제는 기계가 직선 어셈블리를 실행하지만 운영 체제가 바이너리를 실행할 위치를 설정해야한다는 것입니다. 이것이 ELF 헤더와 같은 것을 가지고있는 이유입니다. 귀하의 운영 체제는 코드가 어디에 있는지, BSS 섹션, 데이터를로드 할 위치 등을 알아야합니다.이 정보가 없으면 운영 체제는 올바르게 원시 어셈블리를 제공 할 수 없습니다.

인라인 데이터 (지침에 코드화되어 있음)가있는 어셈블리 코드가있는 경우 헤더가 필요 없다고 말할 수 있지만 거의 그렇지 않습니다.

+0

왜 연결 단계에서 머리글을 추가 할 수 없습니까? 그러나 이것이 무엇이든, 어셈블러가 아닙니다. – Hawken

+1

@Hawken 링커는 헤더 정보를 필요로하지 않으면 섹션이 어디에 있는지 알지 못합니다. –

+0

하지만 어셈블러의 책임에서 벗어나지는 않습니까? 섹션 데이터를 별도의 파일로 유지하는 것이 더 바람직하지 않습니까? – Hawken