Tôi đã sử dụng WinDbg để gỡ lỗi các tệp kết xuất một lúc.
Có một "mẹo" tốt đẹp hoạt động với các chương trình gốc x86, bạn có thể quét ngăn xếp cho các cờ CONTEXT_ALL
(0x1003f).Tôi làm cách nào để tìm các ngoại lệ gốc trong ngăn xếp x64?
Trong x64 các CONTEXT_ALL
cờ dường như không chứa 0x1003f ...
Bây giờ vấn đề là đôi khi bạn kết hợp tự nhiên với mã số quản lý, các phương pháp thông thường của việc tìm kiếm ngoại lệ (như .exc hay. sự kiện cuôi cung).
Tương đương với điều này 0x1003f in x64 là gì? có một hằng số như vậy không?
EDIT:
BTW, nếu bạn đang tự hỏi, về mặt lý thuyết nó cần phải có được 10003f vì các định nghĩa:
#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
Nhưng nó không phải là ...
có vẻ như hoạt động, nhưng bù lại phần đầu của cấu trúc là gì? Tôi không thể lấy chồng của tôi từ này được nêu ra. –
Giá trị bạn đang tìm kiếm có lẽ đại diện cho trường ContextFlags của cấu trúc _CONTEXT. Khi bạn tìm thấy giá trị ma thuật trên ngăn xếp, địa chỉ con trỏ ngăn xếp trỏ đến địa chỉ của trường ContextFlags của cấu trúc. Vì vậy, để có được cơ sở của cấu trúc, bạn cần phải trừ giá trị bù trừ của trường ContextFlags. – snoone