1

作成したライブラリを確認するために、dumpbin/symbolsを使用しました。一部の関数では、出力にUNDEFnotypeが 含まれています。どういう意味ですか?ダンプビン出力の構造を研究するためのリンクはありますか?

4

1 に答える 1

5

次のMSDNドキュメントをdumpbin /SYMBOLS参照できます。

このオプションは、COFFシンボルテーブルを表示します。シンボルテーブルはすべてのオブジェクトファイルに存在します。COFFシンボルテーブルは、/DEBUGとリンクされている場合にのみ画像ファイルに表示されます。

以下は、/SYMBOLSの出力の説明です。/ SYMBOLS出力の意味に関する追加情報は、winnt.h(IMAGE_SYMBOLおよびIMAGE_AUX_SYMBOL)またはCOFFのドキュメントを参照してください。

次のサンプルダンプがあるとします。

ファイルmain.objのダンプ
ファイルタイプ:COFF OBJECT

COFFシンボルテーブル
000 00000000DEBUGnotypeファイル名| 。ファイル
      main.cpp
002000B1FDBABSノータイプスタティック| @ comp.id
003 00000000SECT1notype静的| .drectve
      セクション長26、#relocs 0、#linenums 0、チェックサム722C964F
005 00000000SECT2notype静的| 。文章
      セクション長23、#relocs 1、#linenums 0、チェックサム459FF65F、選択1(重複を選択しない)
007 00000000 SECT2 notype()外部| _主要
008 00000000 UNDEF notype()外部| ?MyDump @@ YAXXZ(void __cdecl MyDump(void))

文字列テーブルサイズ=0x10バイト

概要

      26 .drectve
      23 .text

次の説明は、記号番号で始まる行について、ユーザーに関連する情報を持つ列について説明しています。

最初の3桁の数字は、シンボルのインデックス/番号です。

  • 3番目の列にSECTxが含まれている場合、シンボルはオブジェクトファイルのそのセクションで定義されます。ただし、UNDEFが表示された場合、そのオブジェクトでは定義されていないため、他の場所で解決する必要があります。

  • 5番目の列(静的、外部)は、シンボルがそのオブジェクト内でのみ表示されるかどうか、またはパブリック(外部で表示される)かどうかを示します。静的シンボル_symは、パブリックシンボル_symにリンクされません。これらは、_symという名前の関数の2つの異なるインスタンスになります。

  • 番号付きの行の最後の列は、装飾されたものと装飾されていないものの両方のシンボル名です。

そしてnotype()、それが缶に言うことを正確に意味します:それはタイプを持っていません。

于 2011-08-12T10:05:03.823 に答える