当前位置: 首页>>代码示例>>C#>>正文


C# IPlatform.MakeAddressFromLinear方法代码示例

本文整理汇总了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;

        }
开发者ID:relaxar,项目名称:reko,代码行数:50,代码来源:ElfLoader.cs

示例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);
 }
开发者ID:relaxar,项目名称:reko,代码行数:7,代码来源:ElfLoader.cs


注:本文中的IPlatform.MakeAddressFromLinear方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。