示例#1
0
 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(),
     };
 }
示例#2
0
 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(),
     };
 }
示例#3
0
 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;
 }
示例#4
0
        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; 
        }