Можно прочитать объектный файл? - PullRequest
8 голосов
/ 22 декабря 2011

Мне было любопытно узнать о .obj файлах: я почти не знаю, что они (или что они содержат), поэтому я открыл их с помощью текстового редактора Vim, и внутри я нашел язык, похожий на чужой ...

Есть ли способ понять, что они представляют и каково их содержание? Кроме того, для чего они используются?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 22 декабря 2011

Конечно.

Но каждая другая платформа имеет свой формат объекта. В Windows вы можете использовать такой инструмент, как dumpbin (dumpbin поставляется с Visual Studio). В Linux вы можете использовать "dumpobj" или разобрать программу.

Вот хорошая ссылка для Linux:

http://www.linuxjournal.com/article/1060

PS: objdump также позволяет разбирать объект. Как вы привыкли делать с «отладкой» на ПК с DOS ...

4 голосов
/ 22 декабря 2011

Файлы .obj, используемые link.exe, имеют формат MS COFF.

Здесь вы можете найти «Спецификацию Microsoft PE и COFF» здесь и проанализировать файл .obj в соответствии сэто.

Или, вы можете использовать существующий инструмент, как dumpbin.

3 голосов
/ 22 декабря 2011

Инструмент readelf хорошо показывает вам некоторые подробности о данных:

$ readelf -a /usr/bin/readelf
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
...

Некоторые из его способностей проверять определенные разделы исполняемого файла также могут пригодиться:

$ readelf -p .rodata /usr/bin/readelf | more

String dump of section '.rodata':
  [     4]  R_IA64_IMM14
  [    11]  R_IA64_NONE
  ...
  [  1f58]    Personality routine: 
  [  1f70]  __gcc_personality_v0
  [  1f85]  __gxx_personality_v0
  [  1f9a]  __gcj_personality_v0
  [  1faf]  __gnu_objc_personality_v0
  ...

На самом деле дизассемблирование кода немного растянуто; если вы компилируете свой код с помощью -g для отладки символов, вы можете использовать readelf --debug-dump для чтения исходного кода программы, информации о типах и т. д.

...