singrdk/base/Applications/WebApps/WebShell/Breaker.cs

64 lines
2.1 KiB
C#
Raw Normal View History

2008-11-17 18:29:00 -05:00
///////////////////////////////////////////////////////////////////////////////
//
// Microsoft Research Singularity
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Note:
//
using System;
using System.Text;
using System.Runtime.CompilerServices;
using Microsoft.Singularity;
namespace Microsoft.Singularity.Applications
{
public class Breaker
{
private static Object ToObject(StringBuilder sb)
{
return (Object)sb;
}
public static void Break(int how)
{
if (how == 2) {
Console.WriteLine("Breaking into kernel debugger with write to page zero.");
DebugStub.WriteLine("About to write to page zero.");
StringBuilder sb = new StringBuilder(128);
Object o = ToObject(sb);
unsafe {
byte *buffer = null;
*buffer = 0xff;
}
sb = new StringBuilder(256);
DebugStub.WriteLine("sb={0}, o={1}", __arglist(sb, o));
}
else if (how == 1) {
Console.WriteLine("Breaking into kernel debugger with read from page zero.");
DebugStub.WriteLine("About to read from page zero.");
StringBuilder sb = new StringBuilder(128);
Object o = ToObject(sb);
byte b;
unsafe {
byte *buffer = null;
b = *buffer;
}
sb = new StringBuilder(256);
DebugStub.WriteLine("sb={0}, o={1}, b={2}", __arglist(sb, o, b));
}
else if (how == 2) {
Console.WriteLine("Breaking into kernel debugger.");
DebugStub.WriteLine("About to break into kernel debugger");
StringBuilder sb = new StringBuilder(128);
Object o = ToObject(sb);
DebugStub.Break();
sb = new StringBuilder(256);
DebugStub.WriteLine("sb={0}, o={1}", __arglist(sb, o));
}
}
}
}