可以读取目标文件吗?

Lea*_*dro 8 c++ windows compiler-construction compilation object-files

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

有没有办法了解它们代表什么,它们的内容是什么?另外,它们被用于什么?

谢谢.

Aby*_*byx 6

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

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

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


pau*_*sm4 5

当然.

但是每个不同的平台都有不同的对象格式.在Windows上,您可以使用dumpbin之类的工具(随Visual Studio一起提供dumpbin).在Linux上,您可以使用"dumpobj",或者反汇编程序.

这是Linux的一个很好的链接:

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

PS:objdump还允许你反汇编对象.就像你以前在DOS PC上使用"debug"一样......

  • +1链接!本文提供了有关精灵格式的大量信息! (2认同)

sar*_*old 5

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
...
Run Code Online (Sandbox Code Playgroud)

它检查可执行文件特定部分的一些功能也可以派上用场:

$ 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
  ...
Run Code Online (Sandbox Code Playgroud)

实际上反汇编代码有点困难;-g如果您使用调试符号编译代码,则可以使用它readelf --debug-dump来读取程序源、类型信息等。