Microsoft PE/COFF SPEC(v8,第 5.4.4 节)说,当符号具有:
- IMAGE_SYM_CLASS_EXTERNAL 的存储类
- 和0的节号(IMAGE_SYM_UNDEFINED)
它是“指示大小”的“值”字段(在符号表中)。
这让我很困惑。特别是,我想知道“表示什么大小?”。
通常, CL(visual C++) 使用IMAGE_SYM_CLASS_EXTERNAL
andIMAGE_SYM_UNDEFINED
来表示 externs。
为什么链接器需要知道或关心符号的大小?它不只需要知道一个名称,它是一个外部,并设置适当的重定位条目吗?这些都不应该取决于大小。现在,诚然,编译器需要知道这一点,但它会从头文件中获取该信息,而不是从目标文件中。
我查看了一些由 CL 编译的简单示例 extern,Value 字段似乎总是为零。所以,它显然没有被用来编码字段的大小。
有谁知道规范指的是什么“尺寸”?他们是否有任何视觉工作室链接器可能使用该字段的场景,或者规范中的宣传只是胡说八道?我有限的大脑无法想到任何这样的场景。
更新:
请注意,它并不(至少不总是)看起来是符号的大小。在我观察到VALUE IS ALWAYS 0的情况下,这就是问题所在。