public void VisitComment(CodeComment comment) { foreach (var line in Lines(comment.Text)) { writer.Indent(); writer.WriteComment($"// {line}"); writer.Terminate(); } }
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(); } } }
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(); } }
public void VisitLineComment(AbsynLineComment comment) { writer.WriteComment("// " + comment.Comment); writer.Terminate(); }
public override void WriteComment(string comment) { WritePrefix(); w.WriteComment(comment); }
public void VisitComment(CodeComment comment) { writer.Indent(); writer.WriteComment($"// {comment.Text}"); writer.Terminate(); }
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); } } } }