编译后生成的二进制文件会发生什么

What happens to the binaries generated after compilation

我为我的微控制器创建了一个 hex 文件,并将其刻录到微控制器上。 当我创建一个控制台 C 程序并尝试在我的 PC 上 运行 它时,我 PC 的操作系统是否对编译后生成的二进制文件执行类似的操作?在这种情况下,目标是我 PC 的微处理器。

不,这不相似。当你编译一些针对 µc 的东西时,你的编译器通常会在这个控制器上 准确地 发出机器码 运行。

针对现代操作系统,编译器也会生成机器代码,但会将其放入包含大量元信息的文件中,格式取决于目标OS(例如 PE (= portable executable) 用于 Windows,ELF 用于 Linux 和其他 *nix 系统)。这些元信息包含

  • 程序中的确切入口点(而 naked 二进制文件只会在第一个字节开始执行)
  • 可能是重定位信息(如果从不同的地址执行,代码中必须更改的内容)
  • 运行时 link 库需要一个符号 table,因此库函数的地址可以修补到 executable
  • [...]

此 executable 文件随后由您的操作系统加载并在任何执行开始之前进行解释。