本文整理汇总了C#中ImageMap.AddSegment方法的典型用法代码示例。如果您正苦于以下问题:C# ImageMap.AddSegment方法的具体用法?C# ImageMap.AddSegment怎么用?C# ImageMap.AddSegment使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ImageMap
的用法示例。
在下文中一共展示了ImageMap.AddSegment方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ImageMapCreation
public void ImageMapCreation()
{
ImageMap im = new ImageMap(addrBase, img.Length);
im.AddSegment(Address.SegPtr(0x8000, 2), "", AccessMode.ReadWrite);
im.AddSegment(Address.SegPtr(0x8000, 3), "", AccessMode.ReadWrite);
im.AddSegment(Address.SegPtr(0x8000, 0), "", AccessMode.ReadWrite);
// Verify
IEnumerator<KeyValuePair<Address,ImageMapSegment>> e = im.Segments.GetEnumerator();
Assert.IsTrue(e.MoveNext());
ImageMapSegment seg = e.Current.Value;
Assert.AreEqual(2, seg.Size);
Assert.IsTrue(e.MoveNext());
seg = e.Current.Value;
Assert.AreEqual(1, seg.Size);
Assert.IsTrue(e.MoveNext());
seg = e.Current.Value;
Assert.AreEqual(1, seg.Size);
Assert.IsTrue(!e.MoveNext());
}
示例2: AddNamedSegment
public void AddNamedSegment()
{
ImageMap map = new ImageMap(Address.SegPtr(0x0B00, 0), 40000);
map.AddSegment(Address.SegPtr(0xC00, 0), "0C00", AccessMode.ReadWrite, 0);
IEnumerator<KeyValuePair<Address,ImageMapSegment>> e = map.Segments.GetEnumerator();
GetNextMapSegment(e);
ImageMapSegment s = GetNextMapSegment(e);
Assert.AreEqual("0C00", s.Name);
Assert.AreEqual(35904, s.Size);
}
示例3: LoadSegment
bool LoadSegment(NeSegment seg, LoadedImage loadedImage, ImageMap imageMap)
{
Array.Copy(
RawImage,
(uint)seg.DataOffset << this.cbFileAlignmentShift,
loadedImage.Bytes,
seg.LinearAddress - (int)loadedImage.BaseAddress.ToLinear(),
seg.DataLength);
var x = seg.Address.ToLinear();
AccessMode access =
(seg.Flags & 1) != 0
? AccessMode.ReadWrite
: AccessMode.ReadExecute;
imageMap.AddSegment(
seg.Address,
seg.Address.Selector.Value.ToString("X4"),
access,
seg.DataLength);
var rdr = new LeImageReader(
RawImage,
seg.DataLength + ((uint)seg.DataOffset << this.cbFileAlignmentShift));
int count = rdr.ReadLeInt16();
return ApplyRelocations(rdr, count, seg);
}
示例4: AddSectionsToImageMap
private void AddSectionsToImageMap(Address addrLoad, ImageMap imageMap)
{
foreach (Section s in sectionMap.Values)
{
AccessMode acc = AccessMode.Read;
if ((s.Flags & SectionFlagsWriteable) != 0)
{
acc |= AccessMode.Write;
}
if ((s.Flags & SectionFlagsExecutable) != 0)
{
acc |= AccessMode.Execute;
}
var seg = imageMap.AddSegment(addrLoad + s.VirtualAddress, s.Name, acc, s.VirtualSize);
seg.IsDiscardable = s.IsDiscardable;
}
}
示例5: LoadImageBytes
private Program LoadImageBytes(Address addrPreferred, Address addrMax)
{
var bytes = new byte[addrMax - addrPreferred];
var v_base = addrPreferred.ToLinear();
this.image = new LoadedImage(addrPreferred, bytes);
this.imageMap = image.CreateImageMap();
if (fileClass == ELFCLASS64)
{
foreach (var ph in ProgramHeaders64)
{
if (ph.p_vaddr > 0 && ph.p_filesz > 0)
Array.Copy(RawImage, (long)ph.p_offset, bytes, (long)(ph.p_vaddr - v_base), (long)ph.p_filesz);
}
foreach (var segment in SectionHeaders64)
{
if (segment.sh_name == 0 || segment.sh_addr == 0)
continue;
AccessMode mode = AccessMode.Read;
if ((segment.sh_flags & SHF_WRITE) != 0)
mode |= AccessMode.Write;
if ((segment.sh_flags & SHF_EXECINSTR) != 0)
mode |= AccessMode.Execute;
var seg = imageMap.AddSegment(
platform.MakeAddressFromLinear(segment.sh_addr),
GetSectionName(segment.sh_name),
mode);
seg.Designer = CreateRenderer64(segment);
}
}
else
{
foreach (var ph in ProgramHeaders)
{
if (ph.p_vaddr > 0 && ph.p_filesz > 0)
Array.Copy(RawImage, (long)ph.p_offset, bytes, (long)(ph.p_vaddr - v_base), (long)ph.p_filesz);
}
foreach (var segment in SectionHeaders)
{
if (segment.sh_name == 0 || segment.sh_addr == 0)
continue;
AccessMode mode = AccessMode.Read;
if ((segment.sh_flags & SHF_WRITE) != 0)
mode |= AccessMode.Write;
if ((segment.sh_flags & SHF_EXECINSTR) != 0)
mode |= AccessMode.Execute;
var seg = imageMap.AddSegment(Address.Ptr32(segment.sh_addr), GetSectionName(segment.sh_name), mode);
seg.Designer = CreateRenderer(segment);
}
imageMap.DumpSections();
}
var program = new Program(
this.image,
this.imageMap,
this.arch,
this.platform);
importReferences = program.ImportReferences;
return program;
}
示例6: ImageMapOverlaps
public void ImageMapOverlaps()
{
ImageMap im = new ImageMap(Address.SegPtr(0x8000, 0), 40);
im.AddSegment(Address.SegPtr(0x8000, 10), "", AccessMode.ReadWrite, 0);
}