예제 #1
0
        internal PeImage(Memory <byte> imageBytes)
        {
            using var peReader = new PEReader(new MemoryStream(imageBytes.ToArray()));

            BaseRelocationDirectory = new BaseRelocationDirectory(peReader.PEHeaders, imageBytes);

            DelayImportDirectory = new DelayImportDirectory(peReader.PEHeaders, imageBytes);

            ExportDirectory = new ExportDirectory(peReader.PEHeaders, imageBytes);

            Headers = peReader.PEHeaders;

            ImportDirectory = new ImportDirectory(peReader.PEHeaders, imageBytes);

            LoadConfigDirectory = new LoadConfigDirectory(peReader.PEHeaders, imageBytes);

            var debugDirectoryEntries = peReader.ReadDebugDirectory();

            if (debugDirectoryEntries.Any(entry => entry.Type == DebugDirectoryEntryType.CodeView))
            {
                var codeViewEntry = debugDirectoryEntries.First(entry => entry.Type == DebugDirectoryEntryType.CodeView);

                PdbData = peReader.ReadCodeViewDebugDirectoryData(codeViewEntry);
            }

            TlsDirectory = new TlsDirectory(peReader.PEHeaders, imageBytes);

            ValidatePeImage();
        }
예제 #2
0
파일: PeImage.cs 프로젝트: unkmc/Lunar
        internal PeImage(Memory <byte> imageBuffer)
        {
            using var peReader = new PEReader(new MemoryStream(imageBuffer.ToArray()));

            BaseRelocationDirectory = new BaseRelocationDirectory(peReader.PEHeaders, imageBuffer);

            DelayImportDirectory = new DelayImportDirectory(peReader.PEHeaders, imageBuffer);

            ExportDirectory = new ExportDirectory(peReader.PEHeaders, imageBuffer);

            Headers = peReader.PEHeaders;

            ImportDirectory = new ImportDirectory(peReader.PEHeaders, imageBuffer);

            LoadConfigDirectory = new LoadConfigDirectory(peReader.PEHeaders, imageBuffer);

            TlsDirectory = new TlsDirectory(peReader.PEHeaders, imageBuffer);

            ValidatePeImage();
        }