He estado usando WinDbg para depurar archivos de volcado desde hace un tiempo.
Hay un buen "truco" que funciona con programas nativos x86, puede escanear la pila para las banderas CONTEXT_ALL
(0x1003f).¿cómo puedo encontrar excepciones nativas en una pila x64?
En los 64 CONTEXT_ALL
banderas aparentemente no contienen 0x1003f ...
Ahora el problema es que a veces cuando se mezcla nativa con código administrado, los métodos regulares de encontrar excepciones (como .exc o. último evento).
¿Cuál es el equivalente de este 0x1003f en x64? ¿hay tal constante?
EDIT:
Por cierto, si usted se preguntaba, en teoría debería haber sido 10003f debido a las definiciones:
#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
pero no es ...
que parece funcionar, pero ¿cuál es el desplazamiento al principio de la estructura? No pude obtener mi stack de esto todavía. –
El valor que está buscando presumiblemente representa el campo ContextFlags de la estructura _CONTEXT. Cuando encuentre el valor mágico en la pila, la dirección del puntero de la pila apunta a la dirección del campo ContextFlags de la estructura. Por lo tanto, para obtener la base de la estructura, necesita restar el desplazamiento del campo ContextFlags. – snoone