public ColorString ToColorString()
            {
                if (null == m_cs)
                {
                    m_cs = new ColorString();
                    m_cs.Append(DbgProvider.ColorizeModuleName(m_udt.Module.Name))
                    .Append("!")
                    .Append(m_udt.ColorName)
                    .Append(" (size 0x")
                    .Append(m_udt.Size.ToString("x"))
                    .Append(")");

                    int widest = 16;
                    foreach (var item in Items)
                    {
                        var ddti = item.Item as DbgDataTypeInfo;
                        if (null != ddti)
                        {
                            widest = Math.Max(widest, ddti.Name.Length);
                        }
                    }

                    widest = Math.Min(widest, 40);

                    foreach (var item in Items)
                    {
                        m_cs.AppendLine()
                        .Append("   +0x")
                        .Append(item.Offset.ToString("x3"))
                        .Append(" ");

                        var ddti = item.Item as DbgDataTypeInfo;
                        if (null != ddti)
                        {
                            m_cs.Append(ColorString.MakeFixedWidth(ddti.Name, widest))
                            .Append(" : ")
                            .Append(ddti.DataType.ColorName);
                        }
                        else
                        {
                            VTableLayoutItem vli = (VTableLayoutItem)item;
                            var dvti             = (DbgVTableTypeInfo)item.Item;
                            m_cs.AppendPushFg(ConsoleColor.DarkGray);

                            if (vli.VTablePath.Count > 1)
                            {
                                m_cs.Append(vli.VTablePath[1].ColorName).Append(": ");
                            }
                            m_cs.Append(dvti.ToColorString())
                            .AppendPop();
                        }
                    }

                    m_cs.MakeReadOnly();
                } // end if( !m_cs )
                return(m_cs);
            }     // end ToColorString()
示例#2
0
        } // end Module


        public override ColorString ToColorString()
        {
            ColorString cs = new ColorString();

            if (null != Module)
            {
                cs.Append(DbgProvider.ColorizeModuleName(Module.Name)).Append("!");
            }
            cs.Append(DbgProvider.ColorizeTypeName(Name));
            return(cs);
        }
示例#3
0
        // TODO: Is this sufficient? I wonder what a function pointer that returns
        // a function pointer looks like...
        protected override ColorString GetColorName()
        {
            if (null == m_colorName)
            {
                var cs = new ColorString();

                cs.Append(DbgProvider.ColorizeTypeName(ReturnType.Name));
                cs.Append(" (*fn)( ");
                if (0 == Arguments.Count)
                {
                    cs.Append(DbgProvider.ColorizeTypeName("void"));
                    cs.Append(" ");
                }
                else
                {
                    for (int i = 0; i < Arguments.Count; i++)
                    {
                        cs.Append(DbgProvider.ColorizeTypeName(Arguments[i].ArgType.Name));
                        if (i < (Arguments.Count - 1))
                        {
                            cs.Append(",");
                        }

                        cs.Append(" ");
                    }
                }
                m_colorName = cs.Append(")").MakeReadOnly();
            }
            return(m_colorName);
        } // end GetColorName()
示例#4
0
        /// <summary>
        ///    Zero-pads the given value to the specified [string] length. Highlights the
        ///    non-zero portion in Green.
        /// </summary>
        private static ColorString _ZeroPad(ulong val, int desiredLen)
        {
            ColorString cs = null;

            // We need a special case for ulongs to put the ` in.
            if (16 == desiredLen)
            {
                ulong hi = (val & 0xffffffff00000000) >> 32;
                ulong lo = val & 0x00000000ffffffff;

                cs = _ZeroPad(hi, 8);

                // If 'hi' is non-zero, force the bottom half to also be highlighted, even
                // if the bottom half is all zeroes.
                if (0 != hi)
                {
                    cs.AppendPushFg(ConsoleColor.Green);
                }

                cs.Append("`");
                cs.Append(_ZeroPad(lo, 8));

                if (0 != hi)
                {
                    cs.AppendPop();
                }

                return(cs);
            }

            if (0 == val)
            {
                return(new String('0', desiredLen));
            }

            string noLeadingZeroes = val.ToString("x");

            if (noLeadingZeroes.Length == desiredLen)
            {
                return(new ColorString(ConsoleColor.Green, noLeadingZeroes));
            }

            Util.Assert(desiredLen > noLeadingZeroes.Length);

            cs = new ColorString(new String('0', desiredLen - noLeadingZeroes.Length));
            cs.AppendPushPopFg(ConsoleColor.Green, noLeadingZeroes);
            return(cs);
        } // end _ZeroPad()
示例#5
0
        } // end _FormatBlocks()

        private ColorString _FormatCharsOnly(uint numColumns, uint bytesPerChar, Func <char, char> toDisplay)
        {
            if (0 == numColumns)
            {
                numColumns = 32; // documentation says it should be 48, but windbg seems to do 32 instead.
            }
            ColorString   cs      = new ColorString();
            StringBuilder sbChars = new StringBuilder((int)numColumns + 8);
            ulong         addr    = StartAddress;

            for (int idx = 0; idx < Count; idx++)
            {
                if (0 == (idx % numColumns))
                {
                    // This is the beginning of a new line.

                    // First finish off the last line if necessary:
                    if (sbChars.Length > 1)
                    {
                        sbChars.Append('"');
                        cs.AppendPushPopFg(ConsoleColor.Cyan, sbChars.ToString());
                    }

                    sbChars.Clear();
                    sbChars.Append('"');

                    if (0 != idx)
                    {
                        cs.AppendLine();
                    }

                    cs.Append(DbgProvider.FormatAddress(addr, m_is32Bit, true, true)).Append("  ");
                    addr += (ulong)numColumns * bytesPerChar;
                } // end start of new line

                // Widen to ulong to accommodate largest possible item.
                ulong val = (ulong)this[idx];

                if (0 == val)
                {
                    break;
                }

                sbChars.Append(toDisplay((char)val));
            } // end for( idx = 0 .. length )

            // Finish off last line.
            if (sbChars.Length > 1)
            {
                sbChars.Append('"');
                cs.AppendPushPopFg(ConsoleColor.Cyan, sbChars.ToString());
            }

            return(cs.MakeReadOnly());
        } // end _FormatCharsOnly()
示例#6
0
        } // end _FormatCharsOnly()

        private ColorString _FormatBits()
        {
            ColorString cs            = new ColorString();
            uint        bytesPerValue = sizeof(uint);
            uint        bitsPerValue  = bytesPerValue * 8;
            ulong       addr          = StartAddress;

            for (int idx = 0; idx < Count; idx++)
            {
                if (0 != idx)
                {
                    cs.AppendLine();
                }

                cs.Append(DbgProvider.FormatAddress(addr, m_is32Bit, true, true)).Append(" ");
                addr += (ulong)bytesPerValue;

                uint val = this[idx];
                for (int i = 0; i < bitsPerValue; i++)
                {
                    if (i % 8 == 0)
                    {
                        cs.Append(" ");
                    }
                    uint mask = 0x80000000 >> i;
                    if ((mask & val) == mask)
                    {
                        cs.AppendPushPopFg(ConsoleColor.Green, "1");
                    }
                    else
                    {
                        cs.AppendPushPopFg(ConsoleColor.DarkGreen, "0");
                    }
                }

                cs.Append("  " + val.ToString("x").PadLeft(8, '0'));
            } // end for( idx = 0 .. length )

            return(cs.MakeReadOnly());
        } // end _FormatBits()
示例#7
0
        private static ColorString _SummarizeModuleList(bool loadedMods, List <object> modObjList, int maxWidth)
        {
            ColorString cs = new ColorString();

            if (0 == modObjList.Count)
            {
                cs.AppendPushPopFg(ConsoleColor.DarkGray, "(0 modules)");
            }
            else
            {
                cs.Append(Util.Sprintf("{0} modules: ", modObjList.Count));

                for (int i = 0; i < Math.Min(modObjList.Count, 3); i++)
                {
                    if (i > 0)
                    {
                        cs.Append(", ");
                    }

                    DbgModuleInfo dmi = (DbgModuleInfo)modObjList[i];
                    if (loadedMods)
                    {
                        cs.Append(DbgProvider.ColorizeModuleName(dmi.Name));
                    }
                    else
                    {
                        cs.Append(dmi.ImageName);
                    }
                }

                if (modObjList.Count > 3)
                {
                    cs.Append(", ...");
                }
            }

            return(CaStringUtil.Truncate(cs.ToString(DbgProvider.HostSupportsColor), maxWidth));
        } // end _SummarizeModuleList()
示例#8
0
        } // end property Signature


        private ColorString _BuildSignature()
        {
            var cs = new ColorString();

            if (!IsConstructor && !IsDestructor)
            {
                cs.Append(FunctionType.ReturnType.ColorName).Append(" ");
            }

            cs.Append(ColorName).Append("(");

            if ((0 == FunctionType.Arguments.Count) ||
                ((1 == FunctionType.Arguments.Count) && (0 == Util.Strcmp_OI("void", FunctionType.Arguments[0].ArgType.Name))))
            {
                cs.Append(")");
            }
            else
            {
                bool first = true;
                foreach (var fa in FunctionType.Arguments)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        cs.Append(",");
                    }

                    cs.Append(" ").Append(fa.ArgType.ColorName);
                } // end foreach( arg )
                cs.Append(" )");
            }     // end else( there are arguments )
            return(cs.MakeReadOnly());
        }         // end GetSignature()
示例#9
0
        } // end _ZeroPad()

        private ColorString _FormatBlocks(int elemSize,
                                          int charsPerBlock,
                                          uint numColumns,
                                          AddtlInfo addtlInfo)
        {
            if (0 == numColumns)
            {
                numColumns = (uint)(16 / elemSize);
            }

            if (addtlInfo.HasFlag(AddtlInfo.Symbols))
            {
                numColumns = 1;
            }

            int           desiredLen = elemSize * 2;
            ColorString   cs         = new ColorString();
            StringBuilder sbChars    = new StringBuilder(20);
            ulong         addr       = StartAddress;

            cs.AppendPushFg(ConsoleColor.DarkGreen);

            for (int idx = 0; idx < Count; idx++)
            {
                if (0 == (idx % numColumns))
                {
                    // This is the beginning of a new line.

                    // First finish off the last line if necessary:
                    if (addtlInfo.HasFlag(AddtlInfo.Ascii))
                    {
                        if (sbChars.Length > 2)
                        {
                            cs.AppendPushPopFg(ConsoleColor.Cyan, sbChars.ToString());
                        }

                        sbChars.Clear();
                        sbChars.Append("  ");
                    }

                    if (0 != idx)
                    {
                        cs.AppendLine();
                    }

                    cs.Append(DbgProvider.FormatAddress(addr, m_is32Bit, true, true)).Append("  ");
                    addr += (ulong)(numColumns * elemSize);
                } // end start of new line
                else
                {
                    cs.Append(" ");
                }

                // Widen to ulong to accommodate largest possible item.
                ulong val = (ulong)this[idx];

                // This highlights the non-zero portion in [bright] green.
                cs.Append(_ZeroPad(val, desiredLen));

                if (addtlInfo.HasFlag(AddtlInfo.Symbols))
                {
                    ColorString csSym = ColorString.Empty;
                    if (val > 4096)  // don't even bother trying if it's too low.
                    {
                        csSym = m_lookupSymbol(val);
                        if (csSym.Length > 0)
                        {
                            cs.Append(" ").Append(csSym);
                        }
                    }
                    if (addtlInfo.HasFlag(AddtlInfo.Ascii))
                    {
                        if (0 == csSym.Length)
                        {
                            cs.Append("                                          ");
                            _AppendChars(sbChars, idx * elemSize, elemSize);
                        }
                    }
                } // end if( symbols )
                else if (addtlInfo.HasFlag(AddtlInfo.Ascii))
                {
                    _AppendChars(sbChars, idx * elemSize, elemSize);
                } // end else if( Ascii )
            }     // end for( idx = 0 .. length )

            // Finish off last line.
            if (sbChars.Length > 2)
            {
                // It could be a partial line, so we may need to adjust for that.
                int numMissing = (int)numColumns - ((sbChars.Length - 2) / elemSize);
                Util.Assert(numMissing >= 0);
                if (numMissing > 0)
                {
                    cs.Append(new String(' ', numMissing * charsPerBlock));
                }
                cs.AppendPushPopFg(ConsoleColor.Cyan, sbChars.ToString());
            }

            cs.AppendPop(); // pop DarkGreen

            return(cs.MakeReadOnly());
        } // end _FormatBlocks()
示例#10
0
        public ColorString ToColorString()
        {
            if (DEBUG_EVENT.NONE == EventType)
            {
                return(ColorString.Empty);
            }

            ColorString csThreadId;

            if (0xffffffff == ThreadId)
            {
                csThreadId = new ColorString(ConsoleColor.Red, "ffffffff");
            }
            else
            {
                csThreadId = new ColorString(m_debugger.GetUModeThreadByDebuggerId(ThreadId).Tid.ToString("x"));
            }

            ColorString cs = new ColorString(ConsoleColor.Black, ConsoleColor.White, "     Last event:")
                             .Append(" ")
                             .Append(m_debugger.GetProcessSystemId(ProcessId).ToString("x"))
                             .Append(".")
                             .Append(csThreadId)
                             .Append(": ");

            DbgModuleInfo mod = null;
            string        tmp = null;

            string[] lines = null;

            switch (EventType)
            {
            case DEBUG_EVENT.NONE:
                Util.Fail("can't get here");       // we returned ColorString.Empty above
                break;

            case DEBUG_EVENT.BREAKPOINT:
                cs.Append(Description);

                break;

            case DEBUG_EVENT.EXCEPTION:
                tmp = ExceptionEventArgs._CreateMessage(m_debugger,
                                                        ExtraInformation.Exception.ExceptionRecord,
                                                        ExtraInformation.Exception.FirstChance != 0,
                                                        0,
                                                        null,
                                                        false).ToString(DbgProvider.HostSupportsColor);

                lines = tmp.Split(sm_newline, StringSplitOptions.None);

                cs.AppendLine(lines[0]);
                for (int i = 1; i < lines.Length; i++)
                {
                    cs.AppendPushPopFgBg(ConsoleColor.Black, ConsoleColor.White, "                ")
                    .Append(" ")
                    .Append(lines[i]);

                    if (i != lines.Length - 1)
                    {
                        cs.AppendLine();
                    }
                }

                break;

            case DEBUG_EVENT.CREATE_THREAD:
                cs.Append(Description);

                break;

            case DEBUG_EVENT.EXIT_THREAD:
                cs.Append(Description);

                break;

            case DEBUG_EVENT.CREATE_PROCESS:
                cs.Append(Description);

                break;

            case DEBUG_EVENT.EXIT_PROCESS:
                cs.Append(Description);

                break;

            case DEBUG_EVENT.LOAD_MODULE:
                //
                //   Last event: 9c84.3984: Load module C:\WINDOWS\system32\ADVAPI32.dll at 00007ffb`b0cd0000
                //     debugger time: Mon Oct 20 19:30:56.164 2014 (UTC - 7:00)

                mod = m_debugger.GetModuleByAddress(ExtraInformation.LoadModule.Base);
                cs.Append("Loaded module ")
                .AppendPushPopFg(ConsoleColor.White, mod.ImageName)
                .Append(" at ")
                .Append(DbgProvider.FormatAddress(ExtraInformation.LoadModule.Base,
                                                  m_debugger.TargetIs32Bit,
                                                  true));
                break;

            case DEBUG_EVENT.UNLOAD_MODULE:
                // TODO: test this!
                mod = m_debugger.GetModuleByAddress(ExtraInformation.UnloadModule.Base);
                cs.AppendPushPopFg(ConsoleColor.DarkRed, "Unloaded module ")
                .AppendPushPopFg(ConsoleColor.White, mod.ImageName)
                .Append(" at ")
                .Append(DbgProvider.FormatAddress(ExtraInformation.UnloadModule.Base,
                                                  m_debugger.TargetIs32Bit,
                                                  true));
                break;

            case DEBUG_EVENT.SYSTEM_ERROR:
                // TODO: test this!
                cs.AppendPushPopFgBg(ConsoleColor.White, ConsoleColor.Red, "System error:")
                .Append(" ")
                .AppendPushPopFg(ConsoleColor.Red, Util.FormatErrorCode(ExtraInformation.SystemError.Error))
                .Append(".")
                .AppendPushPopFg(ConsoleColor.Red, Util.FormatErrorCode(ExtraInformation.SystemError.Level));

                // TODO: This is a hack.
                var w32e = new System.ComponentModel.Win32Exception((int)ExtraInformation.SystemError.Error);
                cs.AppendLine();
                cs.AppendPushPopFg(ConsoleColor.Red, w32e.Message).Append(".");

                break;

            case DEBUG_EVENT.SESSION_STATUS:
                // DbgEng doesn't save these as "last events".
                Util.Fail(Util.Sprintf("Unexpected last event type: {0}", EventType));

                break;

            case DEBUG_EVENT.CHANGE_DEBUGGEE_STATE:
                // DbgEng doesn't save these as "last events".
                Util.Fail(Util.Sprintf("Unexpected last event type: {0}", EventType));

                break;

            case DEBUG_EVENT.CHANGE_ENGINE_STATE:
                // DbgEng doesn't save these as "last events".
                Util.Fail(Util.Sprintf("Unexpected last event type: {0}", EventType));

                break;

            case DEBUG_EVENT.CHANGE_SYMBOL_STATE:
                // DbgEng doesn't save these as "last events".
                Util.Fail(Util.Sprintf("Unexpected last event type: {0}", EventType));

                break;

            default:
                Util.Fail(Util.Sprintf("Unexpected event type: {0}", EventType));
                throw new Exception(Util.Sprintf("Unexpected event type: {0}", EventType));
            } // end switch( event type )


            cs.AppendLine()
            .AppendPushPopFgBg(ConsoleColor.Black, ConsoleColor.White, "  Debugger time:")
            .Append(" ")
            .Append(DbgProvider.FormatTimestamp(_GetDbgEngLastEventTimestamp(), true));

            return(cs);
        } // end ToColorString()
示例#11
0
        public static ColorString operator +(ColorString a, ColorString b)
        {
            var cs = new ColorString(a);

            return(cs.Append(b));
        }
示例#12
0
        // Example:
        //
        //    0:009> r
        //     r0=00000000  r1=00000000  r2=00000000  r3=76fdcf09  r4=00000000  r5=028df6e0
        //     r6=028df730  r7=00000000  r8=00000001  r9=01507858 r10=015156a8 r11=028df8e8
        //    r12=00000000  sp=028df6c8  lr=00000000  pc=76ccce24 psr=600f0030 -ZC-- Thumb
        //    KERNELBASE!RaiseFailFastException+0x60:
        //    76ccce24 f000f846 bl          KERNELBASE!SignalStartWerSvc (76ccceb4)
        //
        public override ColorString ToColorString()
        {
            if (null == m_colorString)
            {
                ConsoleColor color;
                ColorString  cs = new ColorString(" r0=");
                color = GetColorForDiffAgainstBaseline("r0");
                cs.Append(R0.GetColorizedValueString(color));
                cs.Append("  r1=");
                color = GetColorForDiffAgainstBaseline("r1");
                cs.Append(R1.GetColorizedValueString(color));
                cs.Append("  r2=");
                color = GetColorForDiffAgainstBaseline("r2");
                cs.Append(R2.GetColorizedValueString(color));
                cs.Append("  r3=");
                color = GetColorForDiffAgainstBaseline("r3");
                cs.Append(R3.GetColorizedValueString(color));
                cs.Append("  r4=");
                color = GetColorForDiffAgainstBaseline("r4");
                cs.Append(R4.GetColorizedValueString(color));
                cs.Append("  r5=");
                color = GetColorForDiffAgainstBaseline("r5");
                cs.Append(R5.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append(" r6=");
                color = GetColorForDiffAgainstBaseline("r6");
                cs.Append(R6.GetColorizedValueString(color));
                cs.Append("  r7=");
                color = GetColorForDiffAgainstBaseline("r7");
                cs.Append(R7.GetColorizedValueString(color));
                cs.Append("  r8=");
                color = GetColorForDiffAgainstBaseline("r8");
                cs.Append(R8.GetColorizedValueString(color));
                cs.Append("  r9=");
                color = GetColorForDiffAgainstBaseline("r9");
                cs.Append(R9.GetColorizedValueString(color));
                cs.Append(" r10=");
                color = GetColorForDiffAgainstBaseline("r10");
                cs.Append(R10.GetColorizedValueString(color));
                cs.Append(" r11=");
                color = GetColorForDiffAgainstBaseline("r11");
                cs.Append(R11.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("r12=");
                color = GetColorForDiffAgainstBaseline("r12");
                cs.Append(R12.GetColorizedValueString(color));
                cs.Append("  sp=");
                color = GetColorForDiffAgainstBaseline("sp");
                cs.Append(Sp.GetColorizedValueString(color));
                cs.Append("  lr=");
                color = GetColorForDiffAgainstBaseline("lr");
                cs.Append(Lr.GetColorizedValueString(color));
                cs.Append("  pc=");
                color = GetColorForDiffAgainstBaseline("pc");
                cs.Append(Pc.GetColorizedValueString(color));
                cs.Append(" psr=");
                color = GetColorForDiffAgainstBaseline("psr");
                cs.Append(Psr.GetColorizedValueString(color));

                // TODO:
                cs.AppendLine(" TBD: flags and mode");

                cs.Append(DbgProvider.ColorizeSymbol(StackFrame.SymbolName));
                if (0 != StackFrame.Displacement)
                {
                    cs.Append("+0x");
                    cs.Append(StackFrame.Displacement.ToString("x"));
                }
                cs.AppendLine(":");
                cs.Append(Disasm(Pc.ValueAsPointer));

                m_colorString = cs;
            }
            return(m_colorString);
        } // end ToString()
示例#13
0
        // Example:
        //
        //   eax=7ffdb000 ebx=00000000 ecx=00000000 edx=7785f17d esi=00000000 edi=00000000
        //   eip=777f410c esp=040ef770 ebp=040ef79c iopl=0         nv up ei pl zr na pe nc
        //   cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
        //   ntdll!DbgBreakPoint:
        //
        public override ColorString ToColorString()
        {
            if (null == m_colorString)
            {
                ConsoleColor color;
                ColorString  cs = new ColorString("eax=");
                color = GetColorForDiffAgainstBaseline("eax");
                cs.Append(Eax.GetColorizedValueString(color));
                cs.Append(" ebx=");
                color = GetColorForDiffAgainstBaseline("ebx");
                cs.Append(Ebx.GetColorizedValueString(color));
                cs.Append(" ecx=");
                color = GetColorForDiffAgainstBaseline("ecx");
                cs.Append(Ecx.GetColorizedValueString(color));
                cs.Append(" edx=");
                color = GetColorForDiffAgainstBaseline("edx");
                cs.Append(Edx.GetColorizedValueString(color));
                cs.Append(" esi=");
                color = GetColorForDiffAgainstBaseline("esi");
                cs.Append(Esi.GetColorizedValueString(color));
                cs.Append(" edi=");
                color = GetColorForDiffAgainstBaseline("edi");
                cs.Append(Edi.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("eip=");
                color = GetColorForDiffAgainstBaseline("eip");
                cs.Append(Eip.GetColorizedValueString(color));
                cs.Append(" esp=");
                color = GetColorForDiffAgainstBaseline("esp");
                cs.Append(Esp.GetColorizedValueString(color));
                cs.Append(" ebp=");
                color = GetColorForDiffAgainstBaseline("ebp");
                cs.Append(Ebp.GetColorizedValueString(color));
                cs.Append(" iopl=");
                color = GetColorForDiffAgainstBaseline("iopl");
                cs.AppendPushPopFg(color, ((uint)Iopl.Value).ToString("x"));
                // TODO:
                cs.AppendLine("   TBD: flags");

                cs.Append("cs=");
                color = GetColorForDiffAgainstBaseline("cs");
                cs.AppendPushPopFg(color, ((uint)Cs.Value).ToString("x4"));
                cs.Append("  ss=");
                color = GetColorForDiffAgainstBaseline("ss");
                cs.AppendPushPopFg(color, ((uint)Ss.Value).ToString("x4"));
                cs.Append("  ds=");
                color = GetColorForDiffAgainstBaseline("ds");
                cs.AppendPushPopFg(color, ((uint)Ds.Value).ToString("x4"));
                cs.Append("  es=");
                color = GetColorForDiffAgainstBaseline("es");
                cs.AppendPushPopFg(color, ((uint)Es.Value).ToString("x4"));
                cs.Append("  fs=");
                color = GetColorForDiffAgainstBaseline("fs");
                cs.AppendPushPopFg(color, ((uint)Fs.Value).ToString("x4"));
                cs.Append("  gs=");
                color = GetColorForDiffAgainstBaseline("gs");
                cs.AppendPushPopFg(color, ((uint)Gs.Value).ToString("x4"));
                cs.Append("             efl=");
                color = GetColorForDiffAgainstBaseline("efl");
                cs.Append(Efl.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append(DbgProvider.ColorizeSymbol(StackFrame.SymbolName));
                if (0 != StackFrame.Displacement)
                {
                    cs.Append("+0x");
                    cs.Append(StackFrame.Displacement.ToString("x"));
                }
                cs.AppendLine(":");
                cs.Append(Disasm(Eip.ValueAsPointer));

                m_colorString = cs;
            }
            return(m_colorString);
        } // end ToString()
示例#14
0
        // Example:
        //
        // rax=000007f7d5e4e000 rbx=0000000000000000 rcx=0000000000000000
        // rdx=000007fcac628f98 rsi=0000000000000000 rdi=0000000000000000
        // rip=000007fcac571e00 rsp=0000000b9879fb78 rbp=0000000000000000
        //  r8=0000000000000000  r9=000007fcac628f98 r10=0000000000000000
        // r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
        // r14=0000000000000000 r15=0000000000000000
        // iopl=0         nv up ei pl zr na po nc
        // cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
        //   ntdll!DbgBreakPoint:
        //
        public override ColorString ToColorString()
        {
            if (null == m_colorString)
            {
                ConsoleColor color;
                ColorString  cs = new ColorString("rax=");
                color = GetColorForDiffAgainstBaseline("rax");
                cs.Append(Rax.GetColorizedValueString(color));
                cs.Append(" rbx=");
                color = GetColorForDiffAgainstBaseline("rbx");
                cs.Append(Rbx.GetColorizedValueString(color));
                cs.Append(" rcx=");
                color = GetColorForDiffAgainstBaseline("rcx");
                cs.Append(Rcx.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("rdx=");
                color = GetColorForDiffAgainstBaseline("rdx");
                cs.Append(Rdx.GetColorizedValueString(color));
                cs.Append(" rsi=");
                color = GetColorForDiffAgainstBaseline("rsi");
                cs.Append(Rsi.GetColorizedValueString(color));
                cs.Append(" rdi=");
                color = GetColorForDiffAgainstBaseline("rdi");
                cs.Append(Rdi.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("rip=");
                color = GetColorForDiffAgainstBaseline("rip");
                cs.Append(Rip.GetColorizedValueString(color));
                cs.Append(" rsp=");
                color = GetColorForDiffAgainstBaseline("rsp");
                cs.Append(Rsp.GetColorizedValueString(color));
                cs.Append(" rbp=");
                color = GetColorForDiffAgainstBaseline("rbp");
                cs.Append(Rbp.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append(" r8=");
                color = GetColorForDiffAgainstBaseline("r8");
                cs.Append(R8.GetColorizedValueString(color));
                cs.Append("  r9=");
                color = GetColorForDiffAgainstBaseline("r9");
                cs.Append(R9.GetColorizedValueString(color));
                cs.Append(" r10=");
                color = GetColorForDiffAgainstBaseline("r10");
                cs.Append(R10.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("r11=");
                color = GetColorForDiffAgainstBaseline("r11");
                cs.Append(R11.GetColorizedValueString(color));
                cs.Append(" r12=");
                color = GetColorForDiffAgainstBaseline("r12");
                cs.Append(R12.GetColorizedValueString(color));
                cs.Append(" r13=");
                color = GetColorForDiffAgainstBaseline("r13");
                cs.Append(R13.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("r14=");
                color = GetColorForDiffAgainstBaseline("r14");
                cs.Append(R14.GetColorizedValueString(color));
                cs.Append(" r15=");
                color = GetColorForDiffAgainstBaseline("r15");
                cs.Append(R15.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append("iopl=");
                color = GetColorForDiffAgainstBaseline("iopl");
                cs.AppendPushPopFg(color, ((ulong)Iopl.Value).ToString("x"));
                // TODO:
                cs.AppendLine("   TBD: flags");

                cs.Append("cs=");
                color = GetColorForDiffAgainstBaseline("cs");
                cs.AppendPushPopFg(color, ((ushort)Cs.Value).ToString("x4"));
                cs.Append("  ss=");
                color = GetColorForDiffAgainstBaseline("ss");
                cs.AppendPushPopFg(color, ((ushort)Ss.Value).ToString("x4"));
                cs.Append("  ds=");
                color = GetColorForDiffAgainstBaseline("ds");
                cs.AppendPushPopFg(color, ((ushort)Ds.Value).ToString("x4"));
                cs.Append("  es=");
                color = GetColorForDiffAgainstBaseline("es");
                cs.AppendPushPopFg(color, ((ushort)Es.Value).ToString("x4"));
                cs.Append("  fs=");
                color = GetColorForDiffAgainstBaseline("fs");
                cs.AppendPushPopFg(color, ((ushort)Fs.Value).ToString("x4"));
                cs.Append("  gs=");
                color = GetColorForDiffAgainstBaseline("gs");
                cs.AppendPushPopFg(color, ((ushort)Gs.Value).ToString("x4"));
                cs.Append("             efl=");
                color = GetColorForDiffAgainstBaseline("efl");
                cs.Append(Efl.GetColorizedValueString(color));
                cs.AppendLine();

                cs.Append(DbgProvider.ColorizeSymbol(StackFrame.SymbolName));
                if (0 != StackFrame.Displacement)
                {
                    cs.Append("+0x");
                    cs.Append(StackFrame.Displacement.ToString("x"));
                }
                cs.AppendLine(":");
                cs.Append(Disasm(Rip.ValueAsPointer));

                m_colorString = cs;
            }
            return(m_colorString);
        } // end ToString()