gpt4 book ai didi

windows - COMDAT 段名

转载 作者:可可西里 更新时间:2023-11-01 11:53:51 26 4
gpt4 key购买 nike

我正在为 Windows 二进制文件编写一个链接器,目前正致力于实现 COMDAT。我想我理解大部分规范,除了 COMDAT 部分的三个记录(部分标题、部分符号和辅助符号),规范似乎没有提到存储在其中任何一个中的通用名称。

换句话说,当我在这样的对象上运行 dumpbin 时,它会给出如下输出:

SECTION HEADER #8
.text$mn name
0 physical address
0 virtual address
5 size of raw data
2358 file pointer to raw data (00002358 to 0000235C)
235D file pointer to relocation table
0 file pointer to line numbers
1 number of relocations
0 number of line numbers
60301020 flags
Code
COMDAT; sym= cosl

最后一项 sym= cosl 来自哪里?或者,如果它只是一个指向该部分的常规符号,那么如果有多个不同的此类符号指向它会怎样?

最佳答案

根据Microsoft PE and COFF Specification ,第 4.5.6 节(如果您正在编写链接器,我相信您已经仔细阅读过),sym= 值是 COMDAT 符号,它由链接器与选择值以确定要在最终镜像中保留 COMDAT 部分的哪个副本。每个 COMDAT 部分的符号表中有两个条目。第一个包含部分名称和带有选择信息的辅助记录。 COMDAT 符号值来自 COMDAT 部分的符号表中的第二个条目。它要么是符号的 ShortName 值,要么是它指向的字符串表条目的值。

要链接的各种对象文件中相同 COMDAT 的所有副本的 COMDAT 符号值应该相同。如果我正确理解规范,任何一个目标文件中的特定 COMDAT 部分都应该只有两个符号表条目具有匹配的 SectionNumber。您不应看到多个具有不同值的 COMDAT 符号字符串作为单个 COMDAT 的符号表条目。

关于windows - COMDAT 段名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com