代码之家  ›  专栏  ›  技术社区  ›  jatinBatra

编译后生成的二进制文件会发生什么情况[关闭]

  •  0
  • jatinBatra  · 技术社区  · 7 年前

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   user2371524 user2371524    7 年前

    不,不一样。当您编译以c为目标的内容时,编译器通常会发出 确切地 此控制器上运行的机器代码。

    针对现代操作系统,编译器也会发出机器代码,但会将其放入一个包含大量 元信息 ,格式取决于目标操作系统(例如,对于Windows为PE(=可移植可执行文件),对于Linux和其他*nix系统为ELF)。这些元信息包含以下内容

    • 程序中的确切入口点(当 裸体的 二进制将在第一个字节开始执行)
    • 可能的重新定位信息(如果从不同的地址执行,代码中必须更改哪些内容)
    • 运行时链接库所需的符号表,因此库函数的地址可以修补到可执行文件中
    • […]

    然后,此可执行文件由操作系统加载并在任何执行开始之前进行解释。