私はしばらくの間、ダンプファイルをデバッグするためにWinDbgを使用してきました。
x86ネイティブプログラムで動作する素晴らしい "トリック"があります。CONTEXT_ALL
フラグ(0x1003f)のスタックをスキャンできます。x64スタックでネイティブ例外を見つけるにはどうしたらいいですか?
x64のではCONTEXT_ALL
フラグが明らかに0x1003f ...
が今の問題は、時にはあなたは、マネージコード、.excなどの例外を(見つけるの定期的な方法でネイティブ混在させると、ということである含まれていません。最後のイベント)。
0x1003fはx64で表されますか?そのような定数はありますか?
EDIT:あなたは不思議に思った場合
ところで、理論的にはそれが理由の定義の10003fされている必要があります。...
#define CONTEXT_I386 0x00010000
#define CONTEXT_AMD64 0x00100000
#define CONTEXT_CONTROL 0x00000001L // SS:SP, CS:IP, FLAGS, BP
#define CONTEXT_INTEGER 0x00000002L // AX, BX, CX, DX, SI, DI
#define CONTEXT_SEGMENTS 0x00000004L // DS, ES, FS, GS
#define CONTEXT_FLOATING_POINT 0x00000008L // 387 state
#define CONTEXT_DEBUG_REGISTERS 0x00000010L // DB 0-3,6,7
#define CONTEXT_EXTENDED_REGISTERS 0x00000020L // cpu specific extensions
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
#define CONTEXT_ALL (CONTEXT_FULL | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
#define CONTEXT_I386_FULL CONTEXT_I386 | CONTEXT_FULL
#define CONTEXT_I386_ALL CONTEXT_I386 | CONTEXT_ALL
#define CONTEXT_AMD64_FULL CONTEXT_AMD64 | CONTEXT_FULL
#define CONTEXT_AMD64_ALL CONTEXT_AMD64 | CONTEXT_ALL
しかし、それはありません
と思われますが、構造体の先頭にどのようなオフセットが戻っていますか?私はまだこれからスタックを得ることができませんでした。 –
あなたが探している値は、おそらく_CONTEXT構造体のContextFlagsフィールドを表しています。スタック上のマジック値を見つけると、スタックポインタのアドレスは構造体のContextFlagsフィールドのアドレスを指します。したがって、構造体の基底を取得するには、ContextFlagsフィールドのオフセットを減算する必要があります。 – snoone