It is possible to read an object file?

前端 未结 3 680
走了就别回头了
走了就别回头了 2021-02-08 03:01

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

相关标签:
3条回答
  • 2021-02-08 03:42

    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.

    0 讨论(0)
  • 2021-02-08 03:44

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

    0 讨论(0)
  • 2021-02-08 04:07

    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.

    0 讨论(0)
提交回复
热议问题