可以读取目标文件

It is possible to read an object file?

本文关键字:文件 目标 读取      更新时间:2023-10-16

我对.obj文件很好奇:我几乎不知道它们是什么(或它们包含什么),所以我用Vim文本编辑器打开它们,我发现里面是一种类似外星人的语言…

是否有办法理解它们代表什么以及它们的内容是什么还有,它们的用途是什么?

谢谢。

当然。

但是每个不同的平台都有不同的对象格式。在Windows上,你可以使用像dumpbin这样的工具(dumpbin是Visual Studio自带的)。在Linux上,您可以使用"dumpobj",或者反汇编程序。

这里有一个很好的Linux链接:

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

PS:Objdump还允许您反汇编对象。

link.exe使用的.obj文件为MS COFF格式。

您可以在这里找到"Microsoft PE and COFF Specification",并根据它解析.obj文件。

或者,您可以使用现有的工具,如dumpbin

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来读取程序源代码、类型信息等。