SECTION HEADER #5
.text name
0 physical address
0 virtual address
24 size of raw data
1B78 file pointer to raw data (00001B78 to 00001B9B)
1B9C file pointer to relocation table
0 file pointer to line numbers
2 number of relocations
0 number of line numbers
60101020 flags
Code
COMDAT; sym= __setdefaultprecision
1 byte align
Execute Read
我查看了COFF的文档,无法理解我是如何得到该部分的符号(__setdefaultprecision
),我有指向符号表,字符串表和部分数组的指针,但我怎么知道每个部分的符号呢?任何帮助表示赞赏。
答案 0 :(得分:0)
对于COMDAT部分,符号表中的前两个条目以及COMDAT部分的部分编号提供了部分的名称和COMDAT符号。第一个符号给出了该部分的名称,在您的示例中为.text
。第二个条目提供COMDAT符号,在您的示例中名为__setdefaultprecision
。
来自Microsoft Portable Executable and Common Object File Format Specification,修订版8.3:
COMDAT部分(仅限对象)
具有COMDAT部分的section值的第一个符号必须 是部分符号。 [...]第二个符号称为“COMDAT符号” 并由链接器与Selection字段一起使用。
如果您在.OBJ上使用DUMPBIN /SYMBOLS
,那么您应该看到两个类似于以下内容的条目:
00A 00000000 SECT5 notype Static | .text
Section length C, #relocs 1, #linenums 0, checksum A2F45556, selection 2 (pick any)
...
00E 00000000 SECT5 notype () External | __setdefaultprecision
请注意,它们不一定是连续的,但它们将成为表格中的前两个SECT5
符号。