// this file contains code handling situations when a kernel is running // most of this is debug stub related private void InitializeDebugConnector(DebugConnector debugConnector) { if (debugConnector == null) { throw new ArgumentNullException("debugConnector"); } debugConnector.OnDebugMsg = s => OutputHandler.LogDebugMessage(s); debugConnector.CmdChannel = ChannelPacketReceived; debugConnector.CmdStarted = () => { OutputHandler.LogMessage("DC: Started"); debugConnector.SendCmd(Vs2Ds.BatchEnd); }; debugConnector.Error = e => { OutputHandler.LogMessage("DC Error: " + e.ToString()); OutputHandler.SetKernelTestResult(false, "DC Error"); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdText += s => { OutputHandler.LogMessage("Text from kernel: " + s); }; debugConnector.CmdSimpleNumber += n => { OutputHandler.LogMessage("Number from kernel: 0x" + n.ToString("X8").ToUpper()); }; debugConnector.CmdMessageBox = s => { OutputHandler.LogMessage("MessageBox from kernel: " + s); }; debugConnector.CmdTrace = t => { }; debugConnector.CmdBreak = t => { }; debugConnector.CmdStackCorruptionOccurred = a => { OutputHandler.LogMessage("Stackcorruption occurred at: 0x" + a.ToString("X8")); OutputHandler.SetKernelTestResult(false, "Stackcorruption occurred at: 0x" + a.ToString("X8")); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdNullReferenceOccurred = a => { OutputHandler.LogMessage("Null Reference Exception occurred at: 0x" + a.ToString("X8")); OutputHandler.SetKernelTestResult(false, "Null Reference Exception occurred at: 0x" + a.ToString("X8")); mKernelResultSet = true; mKernelRunning = false; }; }
// this file contains code handling situations when a kernel is running // most of this is debug stub related private void InitializeDebugConnector(DebugConnector debugConnector) { if (debugConnector == null) { throw new ArgumentNullException("debugConnector"); } debugConnector.CmdChannel = ChannelPacketReceived; debugConnector.CmdStarted = () => { OutputHandler.LogMessage("DC: Started"); debugConnector.SendCmd(Vs2Ds.BatchEnd); }; debugConnector.Error = e => { OutputHandler.LogMessage("DC Error: " + e.ToString()); OutputHandler.SetKernelTestResult(false, "DC Error"); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdText += s => { if (s == "SYS_TestKernel_Completed") { KernelTestCompleted(); return; } else if (s == "SYS_TestKernel_Failed") { KernelTestFailed(); return; } else if (s == "SYS_TestKernel_AssertionSucceeded") { KernelAssertionSucceeded(); return; } OutputHandler.LogMessage("Text from kernel: " + s); }; debugConnector.CmdMessageBox = s => { //OutputHandler.LogMessage("MessageBox from kernel: " + s) }; debugConnector.CmdTrace = t => { }; debugConnector.CmdBreak = t => { }; }
// this file contains code handling situations when a kernel is running // most of this is debug stub related private void InitializeDebugConnector(DebugConnector debugConnector) { if (debugConnector == null) { throw new ArgumentNullException("debugConnector"); } debugConnector.OnDebugMsg = s => OutputHandler.LogDebugMessage(s); debugConnector.ConnectionLost = ex => { OutputHandler.LogError($"DC: Connection lost. {ex.Message}"); }; debugConnector.CmdChannel = ChannelPacketReceived; debugConnector.CmdStarted = () => { OutputHandler.LogMessage("DC: Started"); debugConnector.SendCmd(Vs2Ds.BatchEnd); }; debugConnector.Error = e => { OutputHandler.LogMessage("DC Error: " + e.ToString()); OutputHandler.SetKernelTestResult(false, "DC Error"); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdText += s => OutputHandler.LogMessage("Text from kernel: " + s); debugConnector.CmdSimpleNumber += n => OutputHandler.LogMessage("Number from kernel: 0x" + n.ToString("X8").ToUpper()); debugConnector.CmdSimpleLongNumber += n => OutputHandler.LogMessage("Number from kernel: 0x" + n.ToString("X16").ToUpper()); debugConnector.CmdComplexNumber += f => OutputHandler.LogMessage("Number from kernel: 0x" + f.ToString("X8").ToUpper()); debugConnector.CmdComplexLongNumber += d => OutputHandler.LogMessage("Number from kernel: 0x" + d.ToString("X16").ToUpper()); debugConnector.CmdMessageBox = s => OutputHandler.LogMessage("MessageBox from kernel: " + s); debugConnector.CmdTrace = t => { }; debugConnector.CmdBreak = t => { }; debugConnector.CmdStackCorruptionOccurred = a => { OutputHandler.LogMessage("Stackcorruption occurred at: 0x" + a.ToString("X8")); OutputHandler.SetKernelTestResult(false, "Stackcorruption occurred at: 0x" + a.ToString("X8")); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdStackOverflowOccurred = a => { OutputHandler.LogMessage("Stack overflow occurred at: 0x" + a.ToString("X8")); OutputHandler.SetKernelTestResult(false, "Stack overflow occurred at: 0x" + a.ToString("X8")); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdNullReferenceOccurred = a => { OutputHandler.LogMessage("Null Reference Exception occurred at: 0x" + a.ToString("X8")); OutputHandler.SetKernelTestResult(false, "Null Reference Exception occurred at: 0x" + a.ToString("X8")); mKernelResultSet = true; mKernelRunning = false; }; debugConnector.CmdCoreDump = b => { string xCallStack = ""; string xRegisters = ""; int i = 0; OutputHandler.LogMessage("Core dump:"); string eax = "EAX = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string ebx = "EBX = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string ecx = "ECX = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string edx = "EDX = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string edi = "EDI = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string esi = "ESI = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string ebp = "EBP = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string eip = "EIP = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; string esp = "ESP = 0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); i += 4; OutputHandler.LogMessage(eax + " " + ebx + " " + ecx + " " + edx); OutputHandler.LogMessage(edi + " " + esi); OutputHandler.LogMessage(ebp+ " " + esp+ " " + eip); OutputHandler.LogMessage(""); while (i < b.Length) { string xAddress = "0x" + b[i + 3].ToString("X2") + b[i + 2].ToString("X2") + b[i + 0].ToString("X2") + b[i + 1].ToString("X2"); xCallStack += xAddress + " "; if ((i != 0) &&(i%12 == 0)) { OutputHandler.LogMessage(xCallStack.Trim()); xCallStack = ""; } i += 4; } if (xCallStack != "") { OutputHandler.LogMessage(xCallStack.Trim()); xCallStack = ""; } }; if (RunWithGDB) { debugConnector.CmdInterruptOccurred = a => { OutputHandler.LogMessage($"Interrupt {a} occurred"); }; } }