WinDbgを使用してダンプファイルをデバッグしてきました。
x86ネイティブプログラムで機能する優れた「トリック」があり、スタックをスキャンしてCONTEXT_ALL
フラグ(0x1003f)を探すことができます。
x64では、フラグに0x1003fCONTEXT_ALL
が含まれていないようです...
ここで問題となるのは、ネイティブコードとマネージコードを組み合わせると、例外を見つける通常の方法(.excや.lasteventなど)が発生する場合があることです。
x64でこの0x1003fに相当するものは何ですか?そのような定数はありますか?
編集:
ところで、あなたが疑問に思っているなら、理論的には、定義のために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
しかし、そうではありません...