मैं कुछ समय के लिए डंप फ़ाइलों को डीबग करने के लिए WinDbg का उपयोग कर रहा हूं।
एक अच्छा "चाल" है जो x86 मूल प्रोग्राम के साथ काम करता है, आप CONTEXT_ALL
झंडे (0x1003f) के लिए स्टैक स्कैन कर सकते हैं।मैं x64 स्टैक में देशी अपवाद कैसे प्राप्त कर सकता हूं?
64 में CONTEXT_ALL
झंडे जाहिरा तौर पर शामिल नहीं है 0x1003f ...
अब समस्या यह है कि कभी कभी जब आप प्रबंधित कोड, अपवाद (.exc या की तरह पाने की नियमित तरीकों के साथ देशी मिश्रण है। अंतिम कार्यक्रम)।
x64 में 0x1003f के बराबर क्या है? क्या ऐसा स्थिर है?
संपादित करें:
BTW, अगर आप सोच रहे थे, सिद्धांत रूप में यह 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