静态链接重定位地址
Static linking relocated addresses
我对静态链接有一个非常基本的疑问。
假设我们有 2 个目标代码 A 和 B。目标代码 B 包含由 A 调用的函数 B()。
现在假设在第 100 个位置的目标代码 A 中调用了函数 B()。
现在函数 B() 是直接放置在位置 100 还是放置在最终目标代码文件中的某个其他位置并在第二遍链接期间解析(例如函数 B() 将放置在位置最终目标代码中的 150 和对 B() 的函数调用将解析为 150) ?
链接时,链接器会将A 和B 中的函数放在内存中合适的位置。然后它会查看A的第100个位置的call指令,将B()的地址粘贴到这条指令中。
我对静态链接有一个非常基本的疑问。
假设我们有 2 个目标代码 A 和 B。目标代码 B 包含由 A 调用的函数 B()。
现在假设在第 100 个位置的目标代码 A 中调用了函数 B()。
现在函数 B() 是直接放置在位置 100 还是放置在最终目标代码文件中的某个其他位置并在第二遍链接期间解析(例如函数 B() 将放置在位置最终目标代码中的 150 和对 B() 的函数调用将解析为 150) ?
链接时,链接器会将A 和B 中的函数放在内存中合适的位置。然后它会查看A的第100个位置的call指令,将B()的地址粘贴到这条指令中。