2016-06-29 2 views
2

私はWinDbgでデバッガセッション中です。私はlmコマンドをタイプし、ロードされたモジュールを表示しますが、(エクスポートシンボル)の意味は以下の意味ですか?lmコマンドで 'エクスポートされたシンボル'とは何ですか?

048c0000 0550c000 Db   (export symbols)  Db.dll 
05520000 05535000 Graph  (export symbols)  Graph.dll 

私はそれはシンボルがロードまたはロードまたは延期が、それはそれのどれもないではないと言うだろうどちらか期待していました。この場合、(輸出記号)は何を示していますか?

答えて

3

シンボルがエクスポートされたということは、PDBファイルがロードされておらず、シンボルがバイナリ(EXE、DLL)から読み込まれたことを意味します。バイナリファイルにはエクスポートテーブルがあります。このテーブルは、シンボルを解決するために使用されます。

エクスポートテーブルは、PEファイル形式の機能です。あなたがそれを見たいなら、CFF Explorerを使うことができます。あなたがサンプルのバイナリをしたい場合は、%windir%\system32からntdll.dllを使用します。情報の量について

Export table of NTDLL

、それがこの順で増加しない:

  • 何のシンボル
  • 輸出シンボル
  • 公衆シンボル
  • プライベートシンボル

「遅延」シンボルが表示されることもあります。これは、WinDbgがまだ読み込みを試みていないため、WinDbgがまだ認識していないことを意味します。繰延シンボルを取り除きたい場合は、ld*;.reloadを使用してください。

+0

ありがとう、btw私のアプリは一般公開と民間の違いは何ですか?私のアプリは一般公開されていますか? – zar

+1

@zar:デバッグの目的で、あなたのアプリケーションのシンボルを他の人に提供することを決めたいと思うかもしれません。あなたはPDBファイルをそれらに送ります。しかし、あなたはプライベートメソッド、プライベートプロパティとプライベートメンバーに依存することを望んでいません。したがって、それらのメソッドをPDBファイルから削除してから、誰かに送信します。一般的にはAPIを定義しているので、パブリックメソッドを内部に残します。 –

+1

@zar:パブリックシンボルはパブリックには公開されていませんが、パブリックメソッドなどしか含まれていないためパブリックではありません。[PdbCopy](https://msdn.microsoft.com/en) -us/library/ff560131(VS.85).aspx)。 MicrosoftはNTDLLから[削除したシンボルが多すぎます](http://stackoverflow.com/questions/32278634/is-there-a-known-issue-relating-to-windows-7-kernel-symbols/32278853#32278853) 。 –

関連する問題