Sto usando WinDbg per eseguire il debug dei file di dump per un po 'di tempo.
C'è un bel "trucco" che funziona con i programmi nativi x86, è possibile eseguire la scansione dello stack per i flag CONTEXT_ALL
(0x1003f).come posso trovare le eccezioni native in uno stack x64?
In x64 le CONTEXT_ALL
bandiere a quanto pare non contengono 0x1003f ...
Ora il problema è che a volte quando si mescolano nativa con codice gestito, i metodi regolari di trovare eccezioni (come .exc o. LASTEVENT).
Qual è l'equivalente di questo 0x1003f in x64? c'è una tale costante?
EDIT:
A proposito, se vi stavate chiedendo, in teoria avrebbe dovuto essere 10003f a causa delle definizioni:
#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
ma non è ...
sembra funzionare, ma qual è lo spostamento indietro all'inizio della struttura? Non sono riuscito a ottenere il mio stack da questo ancora. –
Il valore che stai cercando rappresenta presumibilmente il campo ContextFlags della struttura _CONTEXT. Quando trovi il valore magico sullo stack, l'indirizzo del puntatore dello stack punta all'indirizzo del campo ContextFlags della struttura. Pertanto, per ottenere la base della struttura è necessario sottrarre l'offset del campo ContextFlags. – snoone