符号 Table 中的值是什么?

What is Value in Symbol Table?

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

那个 Value 字段是什么,它是什么意思,为什么在这个例子中它总是 0,有人可以显示它不是 0 的情况吗?

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,如果将它们一起链接到程序中,这将导致链接错误.

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

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


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