gpt4 book ai didi

assembly - 外部符号的目标文件链接如何工作?

转载 作者:行者123 更新时间:2023-12-04 05:17:54 25 4
gpt4 key购买 nike

假设你有一个这样的 C 文件:

extern void foo(void);

int main(int argc, char** argv) {
foo();
return 0;
}

这将生成以下 x86-64 程序集:
extern _foo
global _main:
callq foo
retq

当编译器为此编写目标文件时,它如何告诉链接器返回并填写“foo”的实际地址?它是否在 callq 指令的地址字段中留下特殊代码?

最佳答案

我想我想通了(也许有人发表评论让我知道这是否正确)。

编译器在目标文件中发出“重定位条目”。这是一个表,列出了指向需要更新的地址的目标文件中的偏移量。在上面的示例中,“callq foo”将有一个重定位条目,该条目将指向 callq 中地址字段的第一个字节。

在链接期间,链接器遍历所有重定位条目并填写正确的地址。

我看了herehere弄清楚这一点。

关于assembly - 外部符号的目标文件链接如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com