2014-10-17 5 views
1

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

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

EDIT: что-то вроде волшебных байтов в начале файла, которые обычно используются для обнаружения файла формата файла.

ответ

3

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

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

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

Для получения дополнительной информации см. Документы SysV ABI и ARM EABI.

Смежные вопросы