本文整理汇总了C#中IPlatform.MakeAddressFromLinear方法的典型用法代码示例。如果您正苦于以下问题:C# IPlatform.MakeAddressFromLinear方法的具体用法?C# IPlatform.MakeAddressFromLinear怎么用?C# IPlatform.MakeAddressFromLinear使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IPlatform
的用法示例。
在下文中一共展示了IPlatform.MakeAddressFromLinear方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: LoadImageBytes
public override SegmentMap LoadImageBytes(IPlatform platform, byte[] rawImage, Address addrPreferred)
{
var segMap = AllocateMemoryAreas(
ProgramHeaders64
.Where(p => IsLoadable(p.p_vaddr, p.p_type))
.Select(p => Tuple.Create(
platform.MakeAddressFromLinear(p.p_vaddr),
(uint)p.p_pmemsz)));
foreach (var ph in ProgramHeaders64)
{
Debug.Print("ph: addr {0:X8} filesize {0:X8} memsize {0:X8}", ph.p_vaddr, ph.p_filesz, ph.p_pmemsz);
if (!IsLoadable(ph.p_vaddr, ph.p_type))
continue;
var vaddr = platform.MakeAddressFromLinear(ph.p_vaddr);
MemoryArea mem;
segMap.TryGetLowerBound(vaddr, out mem);
if (ph.p_filesz > 0)
Array.Copy(
rawImage,
(long)ph.p_offset, mem.Bytes,
vaddr - mem.BaseAddress, (long)ph.p_filesz);
}
var segmentMap = new SegmentMap(addrPreferred);
foreach (var section in Sections)
{
if (section.Name == null || section.Address == null)
continue;
MemoryArea mem;
if (segMap.TryGetLowerBound(section.Address, out mem) &&
section.Address < mem.EndAddress)
{
AccessMode mode = AccessModeOf(section.Flags);
var seg = segmentMap.AddSegment(new ImageSegment(
section.Name,
section.Address,
mem, mode)
{
Size = (uint)section.Size
});
seg.Designer = CreateRenderer64(section);
}
else
{
//$TODO: warn
}
}
segmentMap.DumpSections();
return segmentMap;
}
示例2: ComputeBaseAddress
public override Address ComputeBaseAddress(IPlatform platform)
{
ulong uBaseAddr = ProgramHeaders64
.Where(ph => ph.p_vaddr > 0 && ph.p_filesz > 0)
.Min(ph => ph.p_vaddr);
return platform.MakeAddressFromLinear(uBaseAddr);
}