在链接中,运行 时间地址与可重定位目标文件的.text(机器代码)部分中的地址有什么区别?
In linking, what is the difference between run-time addresses and the addresses in the .text (machine code) section of a relocatable object file?
我现在正在学习链接(自学),但在理解某些概念时遇到了一些困难。
源代码文件经过预处理、编译、汇编后,得到一个ELF格式(WLOG)的可重定位目标文件。在这个 ____.o 文件中,有一个 .text 部分包含各个源代码的机器代码。
此机器代码是否对应于输入文件中代码的 运行 次地址?就像如果机器代码运行(假设没有未解析的外部引用)代码的运行时间配置文件是否与此处的机器代码匹配?
如果这是真的,那么可以说这段代码中的符号引用指向了它们对应符号的运行时间地址吗?
我需要知道这一点,以便我可以更好地理解在此过程之后直接发生的链接过程。
Does this machine code correspond to the run-time addresses of the code that is in the input file?
没有
它不能,因为单个 .o
文件中的代码 不知道 什么 其他 目标文件将被链接到主要的可执行文件中。想象一下 foo.o
说 "I want to be at address 0x123000",而 bar.o
说 "I want to be at address 0x123004"。他们显然不能在同一个地址。
"final" 运行时地址由 链接器 确定,它收集所有不同的 .o
文件,解析它们之间的引用,并布置内存中的最终可执行文件。 (即使这不是一个完整的故事,因为共享库和位置无关的可执行文件使答案更加复杂。)
我现在正在学习链接(自学),但在理解某些概念时遇到了一些困难。
源代码文件经过预处理、编译、汇编后,得到一个ELF格式(WLOG)的可重定位目标文件。在这个 ____.o 文件中,有一个 .text 部分包含各个源代码的机器代码。
此机器代码是否对应于输入文件中代码的 运行 次地址?就像如果机器代码运行(假设没有未解析的外部引用)代码的运行时间配置文件是否与此处的机器代码匹配?
如果这是真的,那么可以说这段代码中的符号引用指向了它们对应符号的运行时间地址吗?
我需要知道这一点,以便我可以更好地理解在此过程之后直接发生的链接过程。
Does this machine code correspond to the run-time addresses of the code that is in the input file?
没有
它不能,因为单个 .o
文件中的代码 不知道 什么 其他 目标文件将被链接到主要的可执行文件中。想象一下 foo.o
说 "I want to be at address 0x123000",而 bar.o
说 "I want to be at address 0x123004"。他们显然不能在同一个地址。
"final" 运行时地址由 链接器 确定,它收集所有不同的 .o
文件,解析它们之间的引用,并布置内存中的最终可执行文件。 (即使这不是一个完整的故事,因为共享库和位置无关的可执行文件使答案更加复杂。)