首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象文件包含什么?

对象文件包含什么?
EN

Stack Overflow用户
提问于 2010-06-15 21:33:28
回答 8查看 38.5K关注 0票数 56

在C或C++编译的各个阶段,我知道会生成一个目标文件(即any_name.o文件)。此.o文件包含什么内容?我无法打开它,因为它是一个二进制文件。

有谁能帮帮我吗?目标文件的内容主要依赖于我们在Unix上使用的编译器吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-15 21:38:23

对象文件可以包含一堆东西:基本上,它是以下列表的一部分或全部:

  • Symbol命名
  • 编译代码
  • 常量数据,例如。strings
  • Imports -编译代码引用的符号(由linker)
  • Exports修复-目标文件向其他目标文件提供的符号。

链接器将一堆目标文件转换为可执行文件,方法是匹配所有导入和导出,并修改编译后的代码,以便调用正确的函数。

票数 54
EN

Stack Overflow用户

发布于 2010-06-15 21:41:06

有几种标准化的格式(COFF,Unix上的ELF ),基本上它们是用于可执行文件的相同格式的变体,但缺少一些信息。这些缺失的信息将在链接时完成。

对象文件格式基本上包含相同的信息:

编译产生的

  • 二进制代码(用于程序的该部分使用的目标processor)
  • static数据(如常量字符串等)。您可以在BSS (导出数据)和文本(不会被程序修改的数据)之间做更细微的区分。但这对于编译器和链接器来说是最重要的。注意,与二进制代码类似,数据也依赖于目标(大端、小端、32位、由程序的这一部分导出的符号的64bits).
  • tables (主要是函数入口点))
  • 由程序的这一部分使用的外部符号表

当将对象链接在一起时,引用外部符号的代码部分将被实际的值替换(好吧,这仍然过于简化,在运行程序时将在加载时完成最后一部分,但这就是我们的想法)。

目标文件还可能包含解析导入和导出所需的更多符号信息(对于调试非常有用)。可以使用strip命令删除该信息。

票数 14
EN

Stack Overflow用户

发布于 2010-06-15 21:35:39

首先阅读wiki page。您可以使用来检查这样的文件:)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3045603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档