3

Minidump (DbgHelp.h) を介してハンドル情報を取得するのに苦労しています。

MINIDUMP_HANDLE_DESCRIPTOR_2マップされたファイルストリームからのリストを取得しています。次に、フィールドMINIDUMP_HANDLE_OBJECT_INFORMATIONを使用して各記述子 a を取得しています。ObjectInfoRva

MINIDUMP_HANDLE_OBJECT_INFORMATIONしかし、この構造がどのような情報を提供してくれるのか理解できません。 から意味のある情報を抽出するための例をウェブ上で見つけることができませんでしMINIDUMP_HANDLE_OBJECT_INFORMATIONた。ドキュメントはあまり役に立ちません。

MINIDUMP_HANDLE_OBJECT_INFORMATION構造データを使用して人間が読めるデータを取得するにはどうすればよいですか? 私はそれをどうする必要があるのですか?私は常にフィールドで 0 を取得します。InfoTypeこれは - を意味しMiniHandleObjectInformationNoneます。

MINIDUMP_HANDLE_OBJECT_INFORMATION構造体:

public struct MINIDUMP_HANDLE_OBJECT_INFORMATION
{
    public uint NextInfoRva;
    public MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE InfoType;
    public UInt32 SizeOfInfo;
}

MINIDUMP_HANDLE_OBJECT_INFORMATION 構造体でいくつかの実験を行いました

構造体を取得しているときに、RVA アドレスから文字列をSizeOfInfoサイズとともに読み取ることができます。ここで、取得したすべてのハンドル記述子で「ディレクトリ」を文字列として取得しています...

ドキュメントへのリンク:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680375(v=vs.85).aspx

どんな助けでも大歓迎です:)

私がそれを適用しようとしている私のプロセスは、使用WaitForMultipleObjectsしてWaitForSingleObject Kernel32呼び出します。

私の実装へのリンク:

https://github.com/Pavel-Durov/Multithreading-Debugging-Asignments/blob/master/Assignments/Assignments.Core/Handlers/MiniDumpHandler.cs

同じダンプ ファイルで実行する WinDbg コマンド出力へのリンク: https://docs.google.com/document/d/1Hjid-2dcM0aZrg5A1p5VrCBSysU_VQhynXdBAvXV29Q/edit?usp=sharing!handle

おそらく問題は、MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE列挙に有効な値を設定していないことです.この列挙値の宣言で信頼できるソースに精通している人はいますか? 公式なものは見つかりませんでした。

明確にするためだけに。

WinDbj では、MINIDUMP_HANDLE_DESCRIPTOR_2 から取得したものと同じ情報を取得します。たとえば、WinDbg !handle コマンドの出力が次の場合:

Handle 00000004
  Type                   Directory
Handle 00000008
  Type                   Directory
Handle 0000000c
  Type                   Event
Handle 00000010
  Type                   Event
Handle 00000014
  Type                   File
…

MINIDUMP_HANDLE_DESCRIPTOR_2タイプのObjectName と TypeNameから同じデータを取得できますMINIDUMP_STRING

取得できない情報は、MINIDUMP_HANDLE_OBJECT_INFORMATION構造体にある情報です。!hanldeコマンド出力には表示されません。

MINIDUMP_HANDLE_OBJECT_INFORMATION にはどのような情報が含まれていると思われますか?

4

1 に答える 1

0

マネージ コードをデバッグし、それを C++ コード例と比較するという大まかな数時間の後、構造体の読み取りに関するバグを発見しました。アドレスを適切MINIDUMP_HANDLE_OBJECT_INFORMATIONに計算していませんでした。rva + baseMinidump

これで動作し、処理する追加情報を取得できます:)

Mu コードはこちらにあります: https://github.com/Pavel-Durov/Multithreading-Debugging-Asignments/blob/master/Assignments/Assignments.Core/Handlers/MiniDumpHandler.cs

144 行目、DealWithHandleInfo 関数

于 2016-03-15T07:33:39.880 に答える