2014-10-17 145 views
1

我需要識別用於生成一些二進制文件,程序,動態庫和靜態庫的ABI。在ELF或二進制文件中有特定ABI的簽名?

我想問一下,如果有一個屬性或一個標籤或字符串,我可以與一些外部的工具,看看哪些ABI被用於創建二進制對象進行檢查。我的對象主要是用於x86和ARM的ELF,並且我也包含ABI以用於調試目的,就像DWARF一樣。

編輯:像在一般用於檢測文件的FILEFORMAT文件開始神奇字節。

回答

3

ELF文件中可能存在幾個指標。

  1. ELF header ident
  2. .note.ABI-tag用來標誌EI_OSABI領域例如Linux vs. FreeBSD binaries
  3. FreeBSDe_indent字段(從第8字節開始)的保留部分使用「品牌」簽名。
  4. 對於ARM文件,你還必須EABI版/中e_flags field變種的信息,並且將目標文件可能還會有.ARM.attributes部分
  5. .comment部分可能包含編譯器名稱/版本,但它只是信息是 - 它不使用由操作系統來識別ABI,並且通常沒有提及具體的ABI信息。
  6. .note部分可能包含可能指向正在使用的ABI的其他信息。

在大多數情況下,readelf將顯示必要的信息,雖然你可能需要添加一些開關(例如-A顯示.ARM.attributes部分)。我不認爲有什麼解析.note.ABI-tag部分,所以你可能需要手動。

欲瞭解更多信息,請參閱SysV的ABI以及ARM EABI文檔。

相關問題