Beispiel #1
0
 public void VisitComment(CodeComment comment)
 {
     foreach (var line in Lines(comment.Text))
     {
         writer.Indent();
         writer.WriteComment($"// {line}");
         writer.Terminate();
     }
 }
Beispiel #2
0
        private void DumpProcedureHeaderComment(Procedure proc, Formatter formatter)
        {
            formatter.WriteComment($";; {proc.Name}: {proc.EntryAddress}");
            formatter.WriteLine();
            var callerStms = program.CallGraph.CallerStatements(proc)
                             .OrderBy(c => c.LinearAddress)
                             .ToArray();

            if (callerStms.Length > 0)
            {
                formatter.WriteComment(";;   Called from:");
                formatter.WriteLine();
                foreach (var stm in callerStms)
                {
                    var addr = program.SegmentMap.MapLinearAddressToAddress(stm.LinearAddress);
                    formatter.WriteComment(";;     ");
                    formatter.WriteHyperlink(addr.ToString(), addr);
                    formatter.Write(" (in ");
                    formatter.WriteHyperlink(stm.Block.Procedure.Name, stm.Block.Procedure);
                    formatter.Write(")");
                    formatter.WriteLine();
                }
            }
        }
Beispiel #3
0
 private void WritePadBytes(long fieldOffset)
 {
     if (rdr.Offset < fieldOffset)
     {
         // Need padding.
         fmt.Indent();
         fmt.WriteKeyword("db\t");
         var sep = "";
         while (rdr.Offset < fieldOffset)
         {
             var b = rdr.ReadByte();
             fmt.Write("{0}0x{1:X2}", sep, b);
             sep = ",";
         }
         fmt.Write("\t");
         fmt.WriteComment("; padding");
         fmt.WriteLine();
     }
 }
Beispiel #4
0
 public void VisitLineComment(AbsynLineComment comment)
 {
     writer.WriteComment("// " + comment.Comment);
     writer.Terminate();
 }
Beispiel #5
0
 public override void WriteComment(string comment)
 {
     WritePrefix();
     w.WriteComment(comment);
 }
Beispiel #6
0
 public void VisitComment(CodeComment comment)
 {
     writer.Indent();
     writer.WriteComment($"// {comment.Text}");
     writer.Terminate();
 }
Beispiel #7
0
        public void Dump(Program program, Formatter formatter)
        {
            var map = program.SegmentMap;
            ImageSegment segment = null;
            foreach (ImageMapItem i in program.ImageMap.Items.Values)
            {
                if (!map.IsValidAddress(i.Address))
                    continue;
                ImageSegment seg;
                if (!map.TryFindSegment(i.Address, out seg))
                    continue;
                if (seg != segment)
                {
                    segment = seg;
                    formatter.WriteLine(";;; Segment {0} ({1})", seg.Name, seg.Address);
                }

                ImageMapBlock block = i as ImageMapBlock;
                if (block != null)
                {
                    formatter.WriteLine();
                    Procedure proc;
                    if (program.Procedures.TryGetValue(block.Address, out proc))
                    {
                        formatter.WriteComment(string.Format(
                            ";; {0}: {1}", proc.Name, block.Address));
                        formatter.WriteLine();

                        formatter.Write(proc.Name);
                        formatter.Write(" ");
                        formatter.Write("proc");
                        formatter.WriteLine();
                    }
                    else
                    {
                        formatter.Write(block.Block.Name);
                        formatter.Write(":");
                        formatter.WriteLine();
                    }
                    DumpAssembler(program.SegmentMap, block.Address, block.Address + block.Size, formatter);
                    continue;
                }

                ImageMapVectorTable table = i as ImageMapVectorTable;
                if (table != null)
                {
                    formatter.WriteLine(";; Code vector at {0} ({1} bytes)",
                        table.Address, table.Size);
                    foreach (Address addr in table.Addresses)
                    {
                        formatter.WriteLine("\t{0}", addr != null ? addr.ToString() : "-- null --");
                    }
                    DumpData(program.SegmentMap, i.Address, i.Size, formatter);
                }
                else
                {
                    var segLast = segment.Address + segment.Size;
                    var size = segLast - i.Address;
                    size = Math.Min(i.Size, size);
                    if (i.DataType == null || i.DataType is UnknownType ||
                        i.DataType is CodeType)
                    {
                        DumpData(program.SegmentMap, i.Address, size, formatter);
                    }
                    else
                    {
                        DumpTypedData(program.SegmentMap, i, formatter);
                    }
                }
            }
        }