【问题标题】:What exactly is an Object code after a compiled state?编译状态后的对象代码到底是什么?
【发布时间】:2015-11-25 01:38:47
【问题描述】:

我知道目标代码是编译阶段之后的代码,它存在于目标文件中(例如:aaa.obj)。这个文件是什么?包含机器指令?如果是这样,为什么我在该文件中看不到任何 0 和 1。 请帮帮我。

【问题讨论】:

  • 取决于您用来查看文件的内容。任何文件都将包含 0 和 1。目标文件确实包含机器指令和链接器用来构造可执行文件的其他内容。
  • 那么,我应该用什么来查看文件?
  • 非常感谢...你能给我一个反汇编器的名字吗?
  • 取决于您使用的汇编程序和机器。大多数汇编器也可以反汇编目标文件。
  • 对于 Linux,objdump 应该可以工作。

标签: assembly compiler-construction operating-system


【解决方案1】:

What's an object file in C?

目标文件是编译阶段的真正输出。它是 主要是机器代码,但有信息允许链接器查看 符号以及它工作所需的符号都在其中。 (作为参考,“符号”基本上是全局对象的名称, 功能等)

链接器获取所有这些目标文件并将它们组合成一个 可执行文件(假设它可以,即:没有任何重复 或未定义的符号)。许多编译器会为您执行此操作(请阅读: 他们自己运行链接器)如果你不告诉他们“只是 compile” 使用命令行选项。(-c 是一个常见的“just compile; 不要链接”选项。)


如果是这样,为什么我在该文件中看不到任何 0 和 1。

您将目标文件概念与可执行文件概念混淆了。问题是目标文件包含链接器的编译代码和指令(程序从一个或多个目标文件构建一个可执行文件)。链接器程序的输出实际上是可执行文件,其中包含您所期望的零和一。

【讨论】:

  • 即使是可执行文件也不会显示0和1,而是一些无法理解的脚本。为什么?
  • 是的,您的计算机使用 0 和 1(位),但实际上它使用的是序列。 8bit 是一个字节,大多数系统一次使用 8 个字节(64 位系统)。由于大多数人更喜欢文本,而 8 位将用于西方文本 (ascii),大多数编辑器尝试将所有内容显示为 ascii 文本。您会看到很多字符,因为一个字节中的 256 个组合中的大多数都用于一个字符。但除非文件是文本,否则您将看不到(几乎没有)真实的单词。要查看详细信息,您需要一个特殊的程序,如 hexdump、od 等。大多数 Unix 系统都有它们,在 windows 上它是稀疏的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2017-08-23
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多