示例#1
0
 internal void Add(MemSegment seg)
 {
     if (seg.Address >= Address && seg.Address <= EndAddressPadded)
     {
         uint newSize = seg.EndAddress - Address;
         Array.Resize(ref Data, (int)newSize);
         Array.Copy(seg.Data, 0, Data, seg.Address - Address, seg.Data.Length);
     }
 }
示例#2
0
        private List <MemSegment> ReadFlash(string fileName, out bool containsBootloader)
        {
            IELF elf = ELFReader.Load(fileName);
            List <MemSegment> segments = new List <MemSegment>();

            containsBootloader = false;

            foreach (var seg in elf.Segments)
            {
                ELFSharp.ELF.Segments.Segment <uint> sec32 = seg as ELFSharp.ELF.Segments.Segment <uint>;

                if (sec32 == null || sec32.Type != ELFSharp.ELF.Segments.SegmentType.Load || sec32.Size == 0)
                {
                    continue;
                }
                if ((sec32.PhysicalAddress + sec32.Size) > FlashEnd)
                {
                    continue;
                }

                if (sec32.PhysicalAddress < BootloaderEnd)
                {
                    containsBootloader = true;
                }

                MemSegment memSeg = new MemSegment(sec32.PhysicalAddress, sec32.GetMemoryContents());
                var        match  = segments.Where(s => s.Contains(memSeg)).FirstOrDefault();
                if (match != null)
                {
                    match.Add(memSeg);
                }
                else
                {
                    segments.Add(memSeg);
                }
            }

            return(segments);
        }
示例#3
0
 public bool Contains(MemSegment seg)
 {
     return(seg.Address >= Address && seg.Address < EndAddressPadded);
 }