【发布时间】:2020-02-17 19:00:16
【问题描述】:
我正在学习 elf 文件。我读了一些关于它的东西,我开始对它了解得很少,但是有些东西让我感到困惑。我想继续学习并掌握它,但首先我想确保我把最简单的事情做对了。我将在下面说明我所知道的,请纠正我的错误。
当你编写一个 C 应用程序并编译它(比如使用 gcc)时,它会被翻译成代表代码和数据的机器指令。 调用编译器的输出是一个elf文件。 elf 文件包含(除其他外)一个节头,它基本上是一系列 Elf64_Shdr,每个节对应于您编译的应用程序包含的每个节。 所以基本上一个部分只是一些机器指令,它们代表代码或数据以及一些关于它的信息,比如它在哪里(第一条指令的地址),它有多长(大小),它是可写的还是可读的(一些flags) 等。 我对节和节标题的理解是否正确?
当我们运行 make 命令并将 elf 文件传递给它时,链接器开始发挥作用,并查看编译器创建的所有部分,查看它们的名称和属性,并按照 ld 脚本文件的规则将它们分组为“段”并创建我们可以运行的可执行文件所以基本上段只不过是相同属性的部分,它们组合在具有特定名称的公共部分中。这是正确的吗?
然后,当我们实际运行创建的可执行文件时,加载器开始发挥作用,并查看链接器创建的这些段,并通过读取它们包含的这些信息,将机器指令映射到不同的内存位置,以便进程可以运行.这就是所谓的(在我的理解中)记忆图像。这是正确的吗?
感谢您阅读并帮助我消除疑虑,谢谢。
【问题讨论】:
标签: elf