2016-12-05 11 views
0

В ELF-заголовке значение e_ident[EI_CLASS] может быть 1 или 2, что указывает на 32-разрядную операционную или 64-разрядную операционную систему. Но из истории мы знаем, что ELF впервые появился в Solaris 2.0, выпущенном в 1993 году. Однако широко используемый 32-разрядный процессор Pentium Pro не появился до 1995 года. Итак, почему заголовок ELF не имеет информации о 16-разрядном или даже 8-битная информация?Почему в магическом номере ELF нет 16-разрядной информации?

+0

@Someprogrammerdude Спасибо! Я всегда думал, что люди используют 16-битную архитектуру до Pentium. Еще раз спасибо! – JiangFeng

+0

@ Сопрограммист, вы могли бы ответить на этот вопрос; заботиться об этом? – davmac

ответ

6

Первым «широко используемым» 32-битным процессором был Intel 80386, который был намного старше.

Тогда мы имеем историю о SUN и их SPARC архитектурой примерно в то же сроки, что и 386.

Solaris был разработан SUN для своих машин в начале 1990-х годов, когда близко к первой 64- битные системы начали появляться на самом деле.

ELF (аббревиатура Executable and Linkable Format) был разработан в конце 1980-х годов, когда все основные варианты Unix работали на чистых или гибридных (думаю, Motorola 68000) 32-битных системах.

0

EI_CLASS не идентифицирует «операционную систему», а скорее модель памяти. Этот параметр определяет, как различная информация о адресе кодируется в файле, а не обязательно, насколько широкие целевые регистры.

Для процессоров ПК загрузчик кода выполняется на том же ЦП, который будет выполнять программу, содержащуюся в ELF-файле, поэтому EI_CLASS соответствует формату кода. Однако ELF-файлы также используются в качестве переносимого формата кода/отладки даже на 8-битных и 16-разрядных контроллерах. Кроме того, практически все 16-разрядные процессоры могут адресовать более 64 КБ памяти, поэтому для таких целей EI_CLASS не может быть установлен на ELFCLASS16 (при условии существования такого класса).

Подводя итог, не имеет значения, сколько битов имеет широкий указатель, важно только, сколько виртуальной памяти вы можете иметь. Конечно, все еще можно было бы сделать файлы ELF более компактными, определив что-то вроде ELFCLASS20 (общее значение для 16-разрядных процессоров, включая Intel 8086), но, как уже было сказано, 32-разрядные архитектуры уже были распространены в 1993 году, поэтому никто не удосужился определить такую ​​вещь.