Есть сигнатура для конкретного ABI в ELF или бинарном файле?

Мне нужно определить ABI, используемый для создания некоторых двоичных файлов, программ, динамических и статических библиотек.

Я хотел бы спросить, есть ли свойство, тег или строка, которые я могу проверить с помощью какого-нибудь внешнего инструмента, чтобы увидеть, какой ABI использовался для создания этого двоичного объекта. Мои объекты в основном ELF для x86 и ARM, и я также включаю ABI для целей отладки, например, DWARF.

РЕДАКТИРОВАТЬ: что-то вроде магических байтов в начале файла, которые обычно используются для определения формата файла.


person user2485710    schedule 17.10.2014    source источник


Ответы (1)


Есть несколько индикаторов, которые могут присутствовать в файлах ELF.

  1. поле EI_OSABI идентификатор заголовка ELF
  2. .note.ABI-tag, используемый, например, для обозначения Двоичные файлы Linux и FreeBSD.
  3. FreeBSD использует "фирменную" подпись в зарезервированной части поля e_indent (начиная с 8-го байта).
  4. Для файлов ARM у вас дополнительно есть EABI информация о версии/варианте в e_flags поле, а объектные файлы также могут иметь раздел .ARM.attributes
  5. Раздел .comment может содержать имя/версию компилятора, но он носит только информационный характер — он не используется ОС для идентификации ABI и обычно не упоминает конкретную информацию об ABI.
  6. раздел .note может содержать дополнительную информацию, которая может указывать на используемый ABI.

В большинстве случаев readelf будет отображать необходимую информацию, хотя вам может потребоваться добавить некоторые переключатели (например, -A для отображения раздела .ARM.attributes). Я не думаю, что есть что-то для разбора раздела .note.ABI-tag, поэтому вам, возможно, придется сделать это вручную.

Дополнительные сведения см. в документах SysV ABI и ARM EABI.

person Igor Skochinsky    schedule 17.10.2014