符号表中的值是啥?
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
。
【讨论】:
以上是关于符号表中的值是啥?的主要内容,如果未能解决你的问题,请参考以下文章
检查符号 ½ 是不是与表中的值匹配 - MSAccess, PHP