diff --git a/xtoskrnl/ar/amd64/traps.cc b/xtoskrnl/ar/amd64/traps.cc index 7c5a002..cfa2f4c 100644 --- a/xtoskrnl/ar/amd64/traps.cc +++ b/xtoskrnl/ar/amd64/traps.cc @@ -23,6 +23,25 @@ XTCDECL VOID AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame) { + DebugPrint(L"Caught trap: 0x%.2llX with error code: %.4llX at RIP: 0x%.16llX\n" + L"RAX: 0x%.16llX, RBX: 0x%.16llX, RCX: 0x%.16llX, RDX: 0x%.16llX\n" + L"R8: 0x%.16llX, R9: 0x%.16llX, R10: 0x%.16llX, R11: 0x%.16llX\n" + L"R12: 0x%.16llX, R13: 0x%.16llX, R14: 0x%.16llX, R15: 0x%.16llX\n" + L"RBP: 0x%.16llX, RSP: 0x%.16llX, RDI: 0x%.16llX, RSI: 0x%.16llX\n" + L"DR0: 0x%.16llX, DR1: 0x%.16llX, DR2: 0x%.16llX, DR3: 0x%.16llX\n" + L"DR6: 0x%.16llX, DR7: 0x%.16llX\n" + L"CR2: 0x%.16llX, CR3: 0x%.16llX, CS: 0x%.16llX, DS: 0x%.16hX\n" + L"ES: 0x%.16hX, FS: 0x%.16hX, GS: 0x%.16hX, SS: 0x%.16llX\n", + TrapFrame->Vector, TrapFrame->ErrorCode, TrapFrame->Rip, + TrapFrame->Rax, TrapFrame->Rbx, TrapFrame->Rcx, TrapFrame->Rdx, + TrapFrame->R8, TrapFrame->R9, TrapFrame->R10, TrapFrame->R11, + TrapFrame->R12, TrapFrame->R13, TrapFrame->R14, TrapFrame->R15, + TrapFrame->Rbp, TrapFrame->Rsp, TrapFrame->Rdi, TrapFrame->Rsi, + TrapFrame->Dr0, TrapFrame->Dr1, TrapFrame->Dr2, TrapFrame->Dr3, + TrapFrame->Dr6, TrapFrame->Dr7, + TrapFrame->Cr2, TrapFrame->Cr3, TrapFrame->SegCs, TrapFrame->SegDs, + TrapFrame->SegEs, TrapFrame->SegFs, TrapFrame->SegGs, TrapFrame->SegSs); + /* Check vector and call appropriate handler */ switch(TrapFrame->Vector) { @@ -172,7 +191,7 @@ VOID AR::Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n"); - for(;;); + KE::Crash::Panic(0x00); } /** @@ -190,7 +209,7 @@ VOID AR::Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Debug exception (0x01)!\n"); - for(;;); + KE::Crash::Panic(0x01); } /** @@ -208,7 +227,7 @@ VOID AR::Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n"); - for(;;); + KE::Crash::Panic(0x02); } /** @@ -226,7 +245,7 @@ VOID AR::Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled INT3 (0x03)!\n"); - for(;;); + KE::Crash::Panic(0x03); } /** @@ -244,7 +263,7 @@ VOID AR::Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Overflow exception (0x04)!\n"); - for(;;); + KE::Crash::Panic(0x04); } /** @@ -262,7 +281,7 @@ VOID AR::Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n"); - for(;;); + KE::Crash::Panic(0x05); } /** @@ -280,7 +299,7 @@ VOID AR::Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n"); - for(;;); + KE::Crash::Panic(0x06); } /** @@ -298,7 +317,7 @@ VOID AR::Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Device Not Available exception (0x07)!\n"); - for(;;); + KE::Crash::Panic(0x07); } /** @@ -316,7 +335,7 @@ VOID AR::Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Double-Fault exception (0x08)!\n"); - for(;;); + KE::Crash::Panic(0x08); } /** @@ -334,7 +353,7 @@ VOID AR::Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n"); - for(;;); + KE::Crash::Panic(0x09); } /** @@ -352,7 +371,7 @@ VOID AR::Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n"); - for(;;); + KE::Crash::Panic(0x0A); } /** @@ -370,7 +389,7 @@ VOID AR::Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n"); - for(;;); + KE::Crash::Panic(0x0B); } /** @@ -388,7 +407,7 @@ VOID AR::Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n"); - for(;;); + KE::Crash::Panic(0x0C); } /** @@ -406,7 +425,7 @@ VOID AR::Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n"); - for(;;); + KE::Crash::Panic(0x0D); } /** @@ -424,7 +443,7 @@ VOID AR::Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Page-Fault exception (0x0E)!\n"); - for(;;); + KE::Crash::Panic(0x0E); } /** @@ -442,7 +461,7 @@ VOID AR::Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n"); - for(;;); + KE::Crash::Panic(0x10); } /** @@ -460,7 +479,7 @@ VOID AR::Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Alignment-Check exception (0x11)!\n"); - for(;;); + KE::Crash::Panic(0x11); } /** @@ -478,7 +497,7 @@ VOID AR::Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Machine-Check exception (0x12)!\n"); - for(;;); + KE::Crash::Panic(0x12); } /** @@ -496,7 +515,7 @@ VOID AR::Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n"); - for(;;); + KE::Crash::Panic(0x13); } /** @@ -531,7 +550,7 @@ VOID AR::Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Assertion (0x2C)!\n"); - for(;;); + KE::Crash::Panic(0x2C); } /** @@ -549,7 +568,7 @@ VOID AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n"); - for(;;); + KE::Crash::Panic(0x2D); } /** @@ -601,7 +620,7 @@ VOID AR::Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n"); - for(;;); + KE::Crash::Panic(0xFF); } /** diff --git a/xtoskrnl/ar/i686/traps.cc b/xtoskrnl/ar/i686/traps.cc index eb5c1b6..d6c91ee 100644 --- a/xtoskrnl/ar/i686/traps.cc +++ b/xtoskrnl/ar/i686/traps.cc @@ -23,6 +23,21 @@ XTCDECL VOID AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame) { + DebugPrint(L"Caught trap: 0x%.2lX with error code: %.4lX at EIP: 0x%.8lX\n" + L"EAX: 0x%.8lX, EBX: 0x%.8lX, ECX: 0x%.8lX, EDX: 0x%.8lX\n" + L"EBP: 0x%.8lX, ESP: 0x%.8lX, EDI: 0x%.8lX, ESI: 0x%.8lX\n" + L"DR0: 0x%.8lX, DR1: 0x%.8lX, DR2: 0x%.8lX, DR3: 0x%.8lX\n" + L"DR6: 0x%.8lX, DR7: 0x%.8lX\n" + L"CR2: 0x%.8lX, CR3: 0x%.8lX, CS: 0x%.8lX, DS: 0x%.8hX\n" + L"ES: 0x%.8hX, FS: 0x%.8hX, GS: 0x%.8hX, SS: 0x%.8lX\n", + TrapFrame->Vector, TrapFrame->ErrorCode, TrapFrame->Eip, + TrapFrame->Eax, TrapFrame->Ebx, TrapFrame->Ecx, TrapFrame->Edx, + TrapFrame->Ebp, TrapFrame->Esp, TrapFrame->Edi, TrapFrame->Esi, + TrapFrame->Dr0, TrapFrame->Dr1, TrapFrame->Dr2, TrapFrame->Dr3, + TrapFrame->Dr6, TrapFrame->Dr7, + TrapFrame->Cr2, TrapFrame->Cr3, TrapFrame->SegCs, TrapFrame->SegDs, + TrapFrame->SegEs, TrapFrame->SegFs, TrapFrame->SegGs, TrapFrame->SegSs); + /* Check vector and call appropriate handler */ switch(TrapFrame->Vector) { @@ -144,7 +159,7 @@ VOID AR::Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n"); - for(;;); + KE::Crash::Panic(0x00); } /** @@ -162,7 +177,7 @@ VOID AR::Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Debug exception (0x01)!\n"); - for(;;); + KE::Crash::Panic(0x01); } /** @@ -180,7 +195,7 @@ VOID AR::Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n"); - for(;;); + KE::Crash::Panic(0x02); } /** @@ -198,7 +213,7 @@ VOID AR::Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled INT3 (0x03)!\n"); - for(;;); + KE::Crash::Panic(0x03); } /** @@ -216,7 +231,7 @@ VOID AR::Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Overflow exception (0x04)!\n"); - for(;;); + KE::Crash::Panic(0x04); } /** @@ -234,7 +249,7 @@ VOID AR::Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n"); - for(;;); + KE::Crash::Panic(0x05); } /** @@ -252,7 +267,7 @@ VOID AR::Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n"); - for(;;); + KE::Crash::Panic(0x06); } /** @@ -270,7 +285,7 @@ VOID AR::Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Device Not Available exception (0x07)!\n"); - for(;;); + KE::Crash::Panic(0x07); } /** @@ -288,7 +303,7 @@ VOID AR::Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Double-Fault exception (0x08)!\n"); - for(;;); + KE::Crash::Panic(0x08); } /** @@ -306,7 +321,7 @@ VOID AR::Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n"); - for(;;); + KE::Crash::Panic(0x09); } /** @@ -324,7 +339,7 @@ VOID AR::Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n"); - for(;;); + KE::Crash::Panic(0x0A); } /** @@ -342,7 +357,7 @@ VOID AR::Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n"); - for(;;); + KE::Crash::Panic(0x0B); } /** @@ -360,7 +375,7 @@ VOID AR::Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n"); - for(;;); + KE::Crash::Panic(0x0C); } /** @@ -378,7 +393,7 @@ VOID AR::Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n"); - for(;;); + KE::Crash::Panic(0x0D); } /** @@ -396,7 +411,7 @@ VOID AR::Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Page-Fault exception (0x0E)!\n"); - for(;;); + KE::Crash::Panic(0x0E); } /** @@ -414,7 +429,7 @@ VOID AR::Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n"); - for(;;); + KE::Crash::Panic(0x10); } /** @@ -432,7 +447,7 @@ VOID AR::Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Alignment-Check exception (0x11)!\n"); - for(;;); + KE::Crash::Panic(0x11); } /** @@ -450,7 +465,7 @@ VOID AR::Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Machine-Check exception (0x12)!\n"); - for(;;); + KE::Crash::Panic(0x12); } /** @@ -468,7 +483,7 @@ VOID AR::Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n"); - for(;;); + KE::Crash::Panic(0x13); } /** @@ -520,7 +535,7 @@ VOID AR::Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Assertion (0x2C)!\n"); - for(;;); + KE::Crash::Panic(0x2C); } /** @@ -538,7 +553,7 @@ VOID AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n"); - for(;;); + KE::Crash::Panic(0x2D); } /** @@ -573,7 +588,7 @@ VOID AR::Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame) { DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n"); - for(;;); + KE::Crash::Panic(0xFF); } /**