2016-12-05 7 views
0

ELF 헤더에서 e_ident[EI_CLASS]의 값은 1 또는 2 일 수 있으며 32 비트 또는 64 비트 운영 체제를 나타냅니다. 그러나 역사상 우리는 ELF가 1993 년에 발표 된 Solaris 2.0에 처음 등장했음을 알고 있습니다. 그러나 널리 사용되는 32 비트 프로세서 Pentium Pro는 1995 년까지 등장하지 않았습니다. ELF 헤더에는 왜 16 비트에 대한 정보가 없습니까? 심지어 8 비트 정보?ELF 마법 번호에 16 비트 정보가없는 이유는 무엇입니까?

+0

@Someprogrammerdude 감사합니다! 필자는 항상 사람들이 펜티엄까지 16 비트 아키텍처를 사용하고 있다고 생각했습니다. 다시 한 번 감사드립니다! – JiangFeng

+0

@Someprogrammerdudu 그 답을 만들 수 있습니다; 그렇게하기 위해 돌보는가? – davmac

답변

6

첫 번째 "널리 사용되는"32 비트 CPU는 훨씬 더 오래된 Intel 80386입니다. 그런 다음

우리는 태양과 386

가까운 Solaris는 1990 년대 초에 자신의 시스템에 대해 SUN에 의해 ​​개발되었다

에 첫 64와 동시에 프레임 주위에서 자신의 SPARC 아키텍처에 대한 이야기를 비트 시스템이 실제로 나타나기 시작했습니다.

ELF (약어 : Executable and Linkable Format)는 1980 년대 후반, 모든 주요 유닉스 변종이 순수 또는 하이브리드 (생각은 Motorola 68000) 32 비트 시스템에서 실행될 때 개발되었습니다.

0

EI_CLASS은 "운영 체제"가 아니라 메모리 모델을 식별합니다. 이 설정은 다양한 주소 정보가 파일에 인코딩되는 방식을 정의합니다. 대상 레지스터의 너비가 반드시 그럴 필요는 없습니다.

PC CPU의 경우 코드 로더는 ELF 파일에 포함 된 프로그램을 실행할 동일한 CPU에서 실행되므로 EI_CLASS이 코드 형식과 일치합니다. 그러나 ELF 파일은 8 비트 및 16 비트 컨트롤러에서도 이식 가능한 코드/디버그 형식으로 사용됩니다. 게다가 거의 모든 16 비트 CPU가 64KB 이상의 메모리를 처리 할 수 ​​있으므로 이러한 대상에 대해서는을 ELFCLASS16 (이 클래스가 있다고 가정)으로 설정할 수 없습니다.

요약하면, 넓은 포인터가 얼마나 많은 비트인지는 관계가 없습니다. 가상 메모리의 양과 관련이 있습니다. 물론, ELFCLASS20 (Intel 8086을 포함한 16 비트 CPU의 공통 값)과 같은 것을 정의함으로써 ELF 파일을보다 컴팩트하게 만들 수는 있지만, 이미 언급 한 것처럼 1993 년에 32 비트 아키텍처가 이미 널리 보급되었으므로 아무도 그러한 것을 정의하는 것을 귀찮게하지 않았습니다.