链接中的符号表

和风

我读到,在两次通过链接中,在第一次通过期间,所有目标代码的符号表都组合到一个全局表中,所有段及其地址都存储在段表中。

在第二遍中,使用全局符号表和段表进行符号解析。

我的问题是,符号表仅包含值,符号名称和类型条目,那么链接器如何在第二遍符号解析期间从全局符号表中了解每个符号的地址?

维特软件

在组装时定义符号后,该符号将被分配为segment:offset。如果声明为PUBLIC,则将其存储在全局符号表中。

当段链接到可执行映像时,每个段都获得其相对虚拟地址将偏移量添加到该线段的RVA中可得到符号的值。典型的公共符号是库功能的条目。

因此,您的问题的答案是:偏移量是在编译时由编译器指定的,以及段的名称。当段被依次排序时,链接器在链接时指定段地址。它们一起产生所需的符号值(地址)。

如果另一个目标代码引用了该公共符号(调用库函数),则将其声明为EXTERN,并且在汇编时不知道其值,因此将其临时设置为零并附带称为relocation的数据结构重定位指定此临时零的地址,以及外部符号的名称。链接器读取重定位,找到具有匹配名称的对应公共符号,然后用公共符号的值替换临时零。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ELF .data部分中的符号表

来自分类Dev

Go中没有符号表?

来自分类Dev

如何从符号表中引用值?

来自分类Dev

为什么内部链接的名称会出现在目标文件的符号表中?

来自分类Dev

符号表的实现

来自分类Dev

如何避免符号表查找中的歧义?

来自分类Dev

在符号表中记录所有权

来自分类Dev

readelf符号表名称中的数字是什么?

来自分类Java

如何制作符号表

来自分类Dev

符号表和范围

来自分类Dev

将符号动态添加到过程符号表中

来自分类Dev

Gdb重复“未加载符号表”

来自分类Dev

lex和yacc(符号表生成)

来自分类Dev

符号表存储在哪里?

来自分类Dev

构造LC-3符号表

来自分类Dev

ASM-TLINK无符号表

来自分类Dev

GDB找不到符号表

来自分类Dev

打印ELF文件的符号表

来自分类Dev

从elf获取动态符号表信息

来自分类Dev

在x3中动态切换符号表

来自分类Dev

如何通过符号表访问sub:标量变量中main ::和sub的名称

来自分类Dev

在llvm JIT符号表中找不到全局变量

来自分类Dev

最终可执行文件中对符号表的要求?

来自分类Dev

编译的最高阶段是什么,可以在符号表中输入“名称”?

来自分类Dev

在符号表中如何标记变量超出范围?

来自分类Linux

运行中的C程序可以访问其自己的符号表吗?

来自分类Dev

ANTLR 符号表中的这些值是什么意思?

来自分类Dev

从Perl的符号表中删除其名称后访问程序包变量?

来自分类Dev

如何在运行时在 Raku 中动态访问模块的符号表?