符号表中的值是啥?

Posted

技术标签:

【中文标题】符号表中的值是啥?【英文标题】:What is Value in Symbol Table?符号表中的值是什么? 【发布时间】:2021-10-07 20:18:10 【问题描述】:

在以下问题中,我被要求填写符号表,我理解并同意所有内容,除了...

那个 Value 字段是什么,它的含义,为什么在这个例子中它总是 0 并且有人可以展示它不是 0 的情况吗?

【问题讨论】:

注意,我找到了一个来源,它说它与 .o 文件中的部分的距离是有道理的,但为什么 b.o 中的 bar 为 0? bar 是 UND,所以我们不知道它来自哪个部分以及距离是多少...... 这就是原因..它是未定义的,所以值和部分是未知的。它是一个刚刚被引用的外部符号。 【参考方案1】:

Value 是相对于它们在其中定义的部分 (Ndx),所以我认为它是一个偏移量(相对于部分)。

这些符号的值为 0 的原因是因为它们都是它们所在部分的第一个符号!这些只是非常小的例子的巧合和人工制品。

在a.asm中,spam是数据段的第一个,所以偏移量为0。 在 a.asm 中,bar 是文本部分的第一个,因此偏移量为 0。 在 b.asm 中,spam 又是数据段中的第一个,因此偏移量为 0。 在 b.asm 中,_start 是文本部分的第一个,因此偏移量为 0。 在 b.asm 中,bar 未定义,因此在部分中进行了标记。 Value 对于未定义的东西或外部的东西没有任何意义。

这些符号被定义为全局的,这意味着链接器可以看到它们并将导入绑定到导出。但是,a.o 和 b.o 似乎并不打算一起工作,因为它们都定义了符号 spam,如果将它们链接到一个程序中会导致链接错误。

此示例没有导入(但在 b.o 中有一个未定义的条目 bar,但请注意 bar 不是 .global 或以其他方式注明为导入)。

(搬迁是另一回事,但这个问题没有显示或询问他们。)


如果您有两个(或更多)符号,它们之间至少有一个或多个字节(在任何一个部分、数据或文本中),那么除第一个之外的所有符号都将具有非零 Value

【讨论】:

以上是关于符号表中的值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

readelf显示的符号表各列的含义是啥?

查找算法

mysql表中字段值带有符号怎么匹配?

检查符号 ½ 是不是与表中的值匹配 - MSAccess, PHP

我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?

符号表--01---概述与实现