問題タブ [dbghelp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dbghelp - SymGetSymFromAddr32 でのデッドロック
実行可能ファイルのテスト バージョンで SymGetSymFromAddr32 を呼び出しています。最近までこれは正しく機能していましたが、Windows SDK 8.1 の dbghelp.dll と symsrv.dll を使用すると、この関数を呼び出すとアプリケーションがハングします。
これは私が得るコールスタックです:
これは、Windows SDK 8.1 の DLL を使用した場合です (バージョン 6.3.9600.17200 および 6.3.9600.17298 を試しました)。
Windows SDK 8.0 (バージョン 6.2.9200.20512) から DLL に戻すと、アプリケーションは正しく動作し、ハングしなくなりました。
注: 正しい dbghelp.dll (Windows にデフォルトでインストールされているものではなく、シンボル サーバーをサポートするもの) を使用していることを確認するために、LoadLibrary を使用して dbghelp.dll を明示的にロードし、symsrv.dll を同じフォルダーに保存します。 .
助言がありますか?
dbghelp - dbghelp のバージョンは?
私は Dbghelp についていくつかの調査を行っており、面倒な更新を行う必要があるかどうかを判断しようとしています。現在バージョン 6.12 を使用していますが、6.12 から 6.13.X への変更ログを持っている人はいますか? そうでない場合、何か重要な変更があったかどうか知っていますか?
c++ - IUnknown_AddRef_Proxy と IUnknown_Release_Proxy を迂回しようとしましたが成功しませんでした
何らかの理由で、 のアドレスを取得できず、IUnknown_AddRef_ProxyをIUnknown_Release_Proxy使用しDetourFindFunction()たり、 を使用して位置を特定したりできませんSymEnumSymbols()。で別のものを見つけましたが、探しているものがrpcrt4にあると判断しました。combase
私が使用した 2 つの関数は、 内の 1 つを見つけることができますが、それぞれの関数を呼び出す comip.h の行に到達すると、内の 1 つではなく 内の 1 つをrpcrt4呼び出します。この情報は、VS デバッガーがコール スタックに表示するため、どこかで利用できる必要があります。のアドレスを取得するにはどうすればよいですか?combaserpcrt4combasecombase
c++ - DbgHelp - 完全なシンボル シグネチャを取得する (関数名 + パラメーターの型)
特定のマスクに一致するすべてのシンボルを取得し、CALLBACK 関数を使用SymEnumSymbolsしてそれらをベクトルにプッシュするために使用しています。問題は、シンボル名 (PSYMBOL_INFO構造内にある) が関数の名前のみであり、署名全体ではないことです。たとえば、次の関数があります。
SymEnumSymbolsmaskで呼び出し"TestMe!GetImageProcAddress"、一致したシンボルの名前を出力すると、次のようになります。
しかし、これらのいずれかを印刷したい:
だから私の質問 - 完全なシンボル署名 (関数の名前 + パラメーターの型) を取得する方法はありますか? を使用してパラメーターを反復処理しSymSetContext、次にSymEnumSymbolsフラグを使用してフィルター処理することができましSYMFLAG_PARAMETERたが、パラメーターの型を取得する方法がわかりません..
ありがとう!
c++ - dbghelp - 名前で構造体シンボルを取得する
Symbols サービスを構築しています。構造体変数とそのオフセットを出力できるようにしたいと考えています。必要な pdb をロードし、指定されたマスクに適合する構造体を見つけようとしています。たとえば、 struct に関する詳細を取得したいとします_RTL_CRITICAL_SECTION。
を使用してwindbgいるときに、コマンドを使用しdt MSVCP120!_RTL_CRITICAL_SECTIONて構造体情報を取得します(まさに私が欲しいものです)。しかし、コードを使用してシンボルを検索すると:
何も出力されません..つまり、マスクに一致するものはありません..これは、マスクが関数の場合に機能します(たとえば"MSVCP120!std::tr2::sys::_Open_dir")
では、構造体のシンボルを取得するにはどうすればよいですか?
ありがとう!
pinvoke - Get ModuleNeme from ProcessThread.StartAddress
ProcessThread.StartAddress is the memory address of the function that the operating system called that started this thread.
How I get the function name and Module name?
for get function name I found SymFromAddr but for Module name I need help.
c# - MiniDump (DbgHelp.h) でハンドル データを取得する
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構造体:
MINIDUMP_HANDLE_OBJECT_INFORMATION 構造体でいくつかの実験を行いました
構造体を取得しているときに、RVA アドレスから文字列をSizeOfInfoサイズとともに読み取ることができます。ここで、取得したすべてのハンドル記述子で「ディレクトリ」を文字列として取得しています...
ドキュメントへのリンク:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680375(v=vs.85).aspx
どんな助けでも大歓迎です:)
私がそれを適用しようとしている私のプロセスは、使用WaitForMultipleObjectsしてWaitForSingleObject Kernel32呼び出します。
私の実装へのリンク:
同じダンプ ファイルで実行する
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 コマンドの出力が次の場合:
MINIDUMP_HANDLE_DESCRIPTOR_2タイプのObjectName と TypeNameから同じデータを取得できますMINIDUMP_STRING。
取得できない情報は、MINIDUMP_HANDLE_OBJECT_INFORMATION構造体にある情報です。!hanldeコマンド出力には表示されません。
MINIDUMP_HANDLE_OBJECT_INFORMATION にはどのような情報が含まれていると思われますか?
visual-c++ - dbghelp に静的にリンクできますか。ライセンスの結果はどうなりますか?
顧客のマシンからクラッシュ時にダンプを取得するために、dbghelp.lib を VS C++ アプリケーションに静的にリンクする必要があります。アプリケーションは、インストール不要の単一の実行可能ファイルでなければならないという、まったく無意味な要件があります。これが、dbghelp.dll に動的にリンクしない理由です。これは、別のファイルを含めるためです。
これを合法的に行うことはできますか?どこかで難解な EULA に抵触しているのでしょうか?