Почему исполняемый файл, построенный в 64-битном режиме на Linux, отображает тип машины как AMD x86 64? - PullRequest
2 голосов
/ 15 февраля 2012

Я столкнулся с этим, пытаясь понять ELF (Исполняемый и связующий формат).

Шаги, за которыми я следовал

  1. Написал простое приложение. main.c содержащий int main(int argc, char **argv){ return 0;}
  2. Скомпилировано в среде Linux с использованием gcc. (Сделано на ноутбуке Intel) Самая простая команда gcc main.c
  3. Теперь, когда я запускаю a.out, он запускается без проблем. Так что сборка в порядке.
  4. Я использовал инструмент readelf для извлечения информации об ELF, где в машинном поле указывается Advanced Micro Devices X86-64. Эта часть озадачила меня.

Итак, я проверил заголовок файла a.out, он был в соответствии со спецификацией ELF-64 (Value 64 - EM_X86_64).

Кто-нибудь захочет объяснить, почему исполняемый файл, построенный в 64-битном режиме на Linux, показывает тип машины как AMD x86 64?

Ответы [ 3 ]

7 голосов
/ 15 февраля 2012

Платформа x86_64 была названа платформой AMD64 , когда AMD представила ее.Первоначально было не совсем ясно, что Intel когда-либо будет поддерживать его.

Вы заметили, как долго после того, как i386 перестает существовать, многие программы имеют тег архитектуры i386?Это произошло потому, что процессоры i386 представили набор инструкций, который использует программное обеспечение.Аналогичным образом AMD представила набор инструкций, который использует ваша программа, поэтому у нее есть тег архитектуры, который отражает первые процессоры, которые поддерживали этот набор инструкций.(Современный 32-битный код по-прежнему часто помечен i686, что относится к Pentium Pro, около 1995 года.)

3 голосов
/ 15 февраля 2012

Некоторое время чипы IA-64 (архитектура Intel 64-bit) или Itanium были 64-битным предложением Intel, а чипы класса Pentium - чипами IA-32. Набор инструкций микросхемы IA-64 достаточно отличался от набора кодов Pentium, так что люди не брали его в большом количестве. Тем временем AMD выпустила 64-битное расширение для набора кодов Pentium - и это получило широкую поддержку. Через некоторое время Intel поклонилась неизбежному и сделала собственные чипы, совместимые с чипами AMD x86 / 64. Но именно AMD определила архитектуру, поэтому она получила признание в названии.

0 голосов
/ 25 апреля 2014

почему исполняемый файл ... отображает тип машины как AMD x86 64?

Поскольку машинный код ELF, используемый файлом, был зарегистрирован AMD. Официальный список зарегистрированных кодов: http://www.sco.com/developers/gabi/latest/ch4.eheader.html (таблица на второй странице):

e_machine
This member's value specifies the required architecture for an individual file. 

Name    Value   Meaning
EM_NONE 0   No machine
...
EM_X86_64   62  AMD x86-64 architecture
...