我知道目标代码是编译阶段之后的代码,它存在于目标文件中(例如:aaa.obj)。这是什么文件?包含机器说明?如果是这样,我为什么不能在该文件中看到任何0和1。 请帮帮我。
答案 0 :(得分:4)
目标文件是编译阶段的实际输出。它' S 主要是机器代码,但有信息允许链接器看到什么 符号在其中以及为了工作所需的符号。 (供参考,"符号"基本上是全局对象的名称, 功能等。)
链接器获取所有这些目标文件并将它们组合成一个 可执行的(假设它可以,即:没有任何重复 或未定义的符号)。很多编译器都会为你做这个(阅读: 如果你不告诉他们,他们会自己运行链接器 编译"使用命令行选项。 (-c是常见的"只是编译; 没有链接"选项)。
如果是这样,我为什么不能在该文件中看到任何0和1。
您将目标文件概念与可执行文件概念混淆。问题是目标文件包含链接器的编译代码和指令(程序从一个或多个目标文件构建一个可执行文件)。链接器程序的输出实际上是可执行文件,其中包含由零和1组成的预期文件。