win_dump_defs.h (4394B)
1/* 2 * Windows crashdump definitions 3 * 4 * Copyright (c) 2018 Virtuozzo International GmbH 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or later. 7 * See the COPYING file in the top-level directory. 8 * 9 */ 10 11#ifndef QEMU_WIN_DUMP_DEFS_H 12#define QEMU_WIN_DUMP_DEFS_H 13 14typedef struct WinDumpPhyMemRun64 { 15 uint64_t BasePage; 16 uint64_t PageCount; 17} QEMU_PACKED WinDumpPhyMemRun64; 18 19typedef struct WinDumpPhyMemDesc64 { 20 uint32_t NumberOfRuns; 21 uint32_t unused; 22 uint64_t NumberOfPages; 23 WinDumpPhyMemRun64 Run[43]; 24} QEMU_PACKED WinDumpPhyMemDesc64; 25 26typedef struct WinDumpExceptionRecord { 27 uint32_t ExceptionCode; 28 uint32_t ExceptionFlags; 29 uint64_t ExceptionRecord; 30 uint64_t ExceptionAddress; 31 uint32_t NumberParameters; 32 uint32_t unused; 33 uint64_t ExceptionInformation[15]; 34} QEMU_PACKED WinDumpExceptionRecord; 35 36typedef struct WinDumpHeader64 { 37 char Signature[4]; 38 char ValidDump[4]; 39 uint32_t MajorVersion; 40 uint32_t MinorVersion; 41 uint64_t DirectoryTableBase; 42 uint64_t PfnDatabase; 43 uint64_t PsLoadedModuleList; 44 uint64_t PsActiveProcessHead; 45 uint32_t MachineImageType; 46 uint32_t NumberProcessors; 47 union { 48 struct { 49 uint32_t BugcheckCode; 50 uint32_t unused0; 51 uint64_t BugcheckParameter1; 52 uint64_t BugcheckParameter2; 53 uint64_t BugcheckParameter3; 54 uint64_t BugcheckParameter4; 55 }; 56 uint8_t BugcheckData[40]; 57 }; 58 uint8_t VersionUser[32]; 59 uint64_t KdDebuggerDataBlock; 60 union { 61 WinDumpPhyMemDesc64 PhysicalMemoryBlock; 62 uint8_t PhysicalMemoryBlockBuffer[704]; 63 }; 64 union { 65 uint8_t ContextBuffer[3000]; 66 }; 67 WinDumpExceptionRecord Exception; 68 uint32_t DumpType; 69 uint32_t unused1; 70 uint64_t RequiredDumpSpace; 71 uint64_t SystemTime; 72 char Comment[128]; 73 uint64_t SystemUpTime; 74 uint32_t MiniDumpFields; 75 uint32_t SecondaryDataState; 76 uint32_t ProductType; 77 uint32_t SuiteMask; 78 uint32_t WriterStatus; 79 uint8_t unused2; 80 uint8_t KdSecondaryVersion; 81 uint8_t reserved[4018]; 82} QEMU_PACKED WinDumpHeader64; 83 84#define KDBG_OWNER_TAG_OFFSET64 0x10 85#define KDBG_MM_PFN_DATABASE_OFFSET64 0xC0 86#define KDBG_KI_BUGCHECK_DATA_OFFSET64 0x88 87#define KDBG_KI_PROCESSOR_BLOCK_OFFSET64 0x218 88#define KDBG_OFFSET_PRCB_CONTEXT_OFFSET64 0x338 89 90#define VMCOREINFO_ELF_NOTE_HDR_SIZE 24 91 92#define WIN_CTX_X64 0x00100000L 93 94#define WIN_CTX_CTL 0x00000001L 95#define WIN_CTX_INT 0x00000002L 96#define WIN_CTX_SEG 0x00000004L 97#define WIN_CTX_FP 0x00000008L 98#define WIN_CTX_DBG 0x00000010L 99 100#define WIN_CTX_FULL (WIN_CTX_X64 | WIN_CTX_CTL | WIN_CTX_INT | WIN_CTX_FP) 101#define WIN_CTX_ALL (WIN_CTX_FULL | WIN_CTX_SEG | WIN_CTX_DBG) 102 103#define LIVE_SYSTEM_DUMP 0x00000161 104 105typedef struct WinM128A { 106 uint64_t low; 107 int64_t high; 108} QEMU_ALIGNED(16) WinM128A; 109 110typedef struct WinContext { 111 uint64_t PHome[6]; 112 113 uint32_t ContextFlags; 114 uint32_t MxCsr; 115 116 uint16_t SegCs; 117 uint16_t SegDs; 118 uint16_t SegEs; 119 uint16_t SegFs; 120 uint16_t SegGs; 121 uint16_t SegSs; 122 uint32_t EFlags; 123 124 uint64_t Dr0; 125 uint64_t Dr1; 126 uint64_t Dr2; 127 uint64_t Dr3; 128 uint64_t Dr6; 129 uint64_t Dr7; 130 131 uint64_t Rax; 132 uint64_t Rcx; 133 uint64_t Rdx; 134 uint64_t Rbx; 135 uint64_t Rsp; 136 uint64_t Rbp; 137 uint64_t Rsi; 138 uint64_t Rdi; 139 uint64_t R8; 140 uint64_t R9; 141 uint64_t R10; 142 uint64_t R11; 143 uint64_t R12; 144 uint64_t R13; 145 uint64_t R14; 146 uint64_t R15; 147 148 uint64_t Rip; 149 150 struct { 151 uint16_t ControlWord; 152 uint16_t StatusWord; 153 uint8_t TagWord; 154 uint8_t Reserved1; 155 uint16_t ErrorOpcode; 156 uint32_t ErrorOffset; 157 uint16_t ErrorSelector; 158 uint16_t Reserved2; 159 uint32_t DataOffset; 160 uint16_t DataSelector; 161 uint16_t Reserved3; 162 uint32_t MxCsr; 163 uint32_t MxCsr_Mask; 164 WinM128A FloatRegisters[8]; 165 WinM128A XmmRegisters[16]; 166 uint8_t Reserved4[96]; 167 } FltSave; 168 169 WinM128A VectorRegister[26]; 170 uint64_t VectorControl; 171 172 uint64_t DebugControl; 173 uint64_t LastBranchToRip; 174 uint64_t LastBranchFromRip; 175 uint64_t LastExceptionToRip; 176 uint64_t LastExceptionFromRip; 177} QEMU_ALIGNED(16) WinContext; 178 179#endif /* QEMU_WIN_DUMP_DEFS_H */