public override void Render(ImageSegment segment, Program program, Formatter formatter) { var entries = shdr.EntryCount(); var symtab = shdr.LinkedSection; var rdr = loader.CreateReader(shdr.FileOffset); for (ulong i = 0; i < entries; ++i) { ulong offset; if (!rdr.TryReadUInt64(out offset)) { return; } ulong info; if (!rdr.TryReadUInt64(out info)) { return; } ulong addend; if (!rdr.TryReadUInt64(out addend)) { return; } ulong sym = info >> 32; string symStr = loader.GetSymbol64(symtab, sym); formatter.Write("{0:X8} {1,3} {2:X8} {3:X16} {4} ({5})", offset, info & 0xFFFFFFFF, sym, addend, symStr, sym); formatter.WriteLine(); } }
public override void Render(ImageSegment segment, Program program, Formatter formatter) { var entries = shdr.EntryCount(); var symtab = shdr.LinkedSection; var rdr = loader.CreateReader(shdr.FileOffset); for (var i = 0; i < entries; ++i) { uint iName; if (!rdr.TryReadUInt32(out iName)) return; byte info; if (!rdr.TryReadByte(out info)) return; byte other; if (!rdr.TryReadByte(out other)) return; ushort shIndex; if (!rdr.TryReadUInt16(out shIndex)) return; ulong value; if (!rdr.TryReadUInt64(out value)) return; ulong size; if (!rdr.TryReadUInt64(out size)) return; string symStr = loader.GetStrPtr(symtab, iName); string segName = loader.GetSectionName(shIndex); formatter.Write("{0,4} {1,-40} {2:X8} {3:X8} {4:X2} {5}", i, symStr, value, size, info & 0xFF, segName); formatter.WriteLine(); } }