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); } }
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); }
public bool Contains(MemSegment seg) { return(seg.Address >= Address && seg.Address < EndAddressPadded); }