0
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。シンボル テーブル、文字列テーブル、およびセクションの配列へのポインターがありますが、どのようにシンボルを知ることができますか?各セクション?どんな助けでも感謝します。

4

1 に答える 1

0

COMDAT セクションの場合、COMDAT セクションのセクション番号を持つシンボル テーブルの最初の 2 つのエントリは、セクションの名前と COMDAT シンボルを提供します。最初の記号は、セクションの名前を示します。この例では、.text. 2 番目のエントリは、例で名前が付けられた COMDAT シンボルを提供__setdefaultprecisionします。

Microsoft Portable Executable and Common Object File Format Specification、リビジョン 8.3 から:

COMDAT セクション (オブジェクトのみ)

COMDAT セクションのセクション値を持つ最初のシンボルは、セクション シンボルでなければなりません。[...] 2 番目のシンボルは「COMDAT シンボル」と呼ばれ、リンカによって選択フィールドと組み合わせて使用​​されます。

調べていた .OBJ でを使用するDUMPBIN /SYMBOLSと、次のような 2 つのエントリが表示されます。

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、表の最初の 2 つのシンボルになることに注意してください。

于 2015-08-04T22:48:46.747 に答える