Esempio n. 1
0
        public IEnumerable <PefImageSegment> GetImageSegments(EndianByteImageReader rdr, Address addrLoad)
        {
            var addr = addrLoad;

            for (int i = 0; i < ContainerHeader.sectionCount; i++)
            {
                PEFSectionHeader sectionHeader = sectionHeaders[i];

                byte[] containerData = rdr.ReadAt(sectionHeader.containerOffset, rdr => rdr.ReadBytes(sectionHeader.packedSize));

                if (sectionHeader.IsCompressedSection())
                {
                    // replace PEF bytecode with decoded output from the interpreter
                    containerData = DecompressSection(containerData);
                }

                if (sectionHeader.defaultAddress != 0)
                {
                    addr = Address.Ptr32(sectionHeader.defaultAddress);
                }
                else
                {
                    addr = addrLoad;
                }
                var segment = new ImageSegment(
                    sectionNameTable[i] ?? $"seg{sectionHeader.defaultAddress:X8}",
                    new ByteMemoryArea(addr, containerData),
                    sectionHeader.GetAccessMode());

                yield return(new PefImageSegment(sectionHeader, segment));

                addrLoad = (segment.Address + containerData.Length).Align(0x1000);
            }
        }
Esempio n. 2
0
 private static string?GetStandardSectionName(PEFSectionHeader section)
 {
     return(section.sectionKind switch
     {
         PEFSectionType.Code => ".text",
         PEFSectionType.UnpackedData => ".data",
         PEFSectionType.PatternInitializedData => ".data",
         PEFSectionType.Constant => ".rodata",
         PEFSectionType.Loader => ".loader",
         PEFSectionType.Debug => ".debug",
         PEFSectionType.ExecutableData => ".data",
         PEFSectionType.Exception => ".exception",
         PEFSectionType.Traceback => ".traceback",
         _ => null
     });
Esempio n. 3
0
 public PefSection(string?sectionName, PEFSectionHeader sectionHeader, byte[] sectionData)
 {
     Name          = sectionName;
     SectionHeader = sectionHeader;
     SectionData   = sectionData;
 }
Esempio n. 4
0
 public PefImageSegment(PEFSectionHeader header, ImageSegment segment)
 {
     SectionHeader = header;
     Segment       = segment;
 }