private FileHeader LoadHeader() { var rdr = new LeImageReader(RawImage, 0); var magic = rdr.ReadLeUInt16(); switch (magic) { case 0x014C: arch = new IntelArchitecture(ProcessorMode.Protected32); break; default: throw new NotSupportedException(); } return new FileHeader { f_magic = magic, f_nscns = rdr.ReadUInt16(), f_timdat = rdr.ReadUInt32(), f_symptr = rdr.ReadUInt32(), f_nsyms = rdr.ReadUInt32(), f_opthdr = rdr.ReadUInt16(), f_flags = rdr.ReadUInt16(), }; }
private FileHeader LoadHeader() { var rdr = new LeImageReader(RawImage, 0); var magic = rdr.ReadLeUInt16(); var cfgSvc = Services.RequireService<IConfigurationService>(); switch (magic) { case 0x014C: arch = cfgSvc.GetArchitecture("x86-real-16"); break; default: throw new NotSupportedException(); } return new FileHeader { f_magic = magic, f_nscns = rdr.ReadUInt16(), f_timdat = rdr.ReadUInt32(), f_symptr = rdr.ReadUInt32(), f_nsyms = rdr.ReadUInt32(), f_opthdr = rdr.ReadUInt16(), f_flags = rdr.ReadUInt16(), }; }
public List<EntryPoint> LoadEntryPoints(Dictionary<int, string> names) { var rdr = new LeImageReader(RawImage, this.lfaNew + this.offEntryTable); var entries = new List<EntryPoint>(); for (;;) { var cEntries = rdr.ReadByte(); if (cEntries == 0) break; var segNum = rdr.ReadByte(); var seg = this.segments[segNum - 1]; for (int i = 0; i < cEntries; ++i) { var flags = rdr.ReadByte(); var offset = rdr.ReadUInt16(); string name; var addr = seg.Address + offset; var state = arch.CreateProcessorState(); EntryPoint ep; if (names.TryGetValue(entries.Count, out name)) { ep = new EntryPoint(addr, name, state); } else { ep = new EntryPoint(addr, state); } entries.Add(ep); } } return entries; }
public List<ImageSymbol> LoadEntryPoints(Dictionary<int, string> names) { var rdr = new LeImageReader(RawImage, this.lfaNew + this.offEntryTable); var entries = new List<ImageSymbol>(); for (;;) { var cEntries = rdr.ReadByte(); if (cEntries == 0) break; var segNum = rdr.ReadByte(); var seg = this.segments[segNum - 1]; for (int i = 0; i < cEntries; ++i) { var flags = rdr.ReadByte(); var offset = rdr.ReadUInt16(); string name; var addr = seg.Address + offset; var state = arch.CreateProcessorState(); ImageSymbol ep = new ImageSymbol(addr); if (names.TryGetValue(entries.Count, out name)) { ep.Name = name; } ep.Type = SymbolType.Procedure; ep.ProcessorState = state; imageSymbols[ep.Address] = ep; entries.Add(ep); } } return entries; }