14

I was curious about .obj files: I pretty much don't know what they are (or what they contain), so I opened them with Vim text editor and what I found inside was an Alien like language...

Is there any way to understand what they represent and what is their content Also, for what are they being used ?

Thanks.

Boiethios
  • 38,438
  • 19
  • 134
  • 183
Leandro
  • 183
  • 1
  • 2
  • 10
  • 6
    An object file is the output of a compiler. It's generally in binary and is meant to be understood by a linker, not by a human being. Why would wou want to open one? – Etienne de Martel Dec 22 '11 at 05:19

3 Answers3

10

Sure.

But every different platform has a different object format. On Windows, you could use a tool like dumpbin (dumpbin comes with Visual Studio). On Linux, you could use "dumpobj", or disassemble the program.

Here's a good link for Linux:

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

PS: objdump also lets you disassemble the object. Like you used to be able to do with "debug" on DOS PCs...

paulsm4
  • 114,292
  • 17
  • 138
  • 190
7

The .obj files used by link.exe has MS COFF format.

You can find "Microsoft PE and COFF Specification" here, and parse .obj file according to it.

Or, you can use existing tool like dumpbin.

Abyx
  • 12,345
  • 5
  • 44
  • 76
5

The readelf tool is good at showing you some details on the data:

$ 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
...

Some of its abilities to inspect specific sections of the executable can come in handy too:

$ 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
  ...

Actually disassembling the code is a bit of a stretch; if you compile your code with -g for debugging symbols, you can use readelf --debug-dump to read the program source, type information, etc.

sarnold
  • 102,305
  • 22
  • 181
  • 238
  • 1
    Very good response but im doing this on windows and I doubt it has those console options – Leandro Dec 22 '11 at 05:29
  • 1
    Ahl yes, `readelf` really is for ELF files. Not so useful on Windows unless you're cross-compiling. – sarnold Dec 23 '11 at 23:39