Exemplo n.º 1
0
        private uint[] ReadAddresses(IBinaryStreamReader reader, IOffsetConverter converter)
        {
            var addressReader = reader.CreateSubReader(converter.RvaToFileOffset(AddressOfFunctions));
            var addresses     = new uint[NumberOfFunctions];

            for (int i = 0; i < NumberOfFunctions; i++)
            {
                addresses[i] = addressReader.ReadUInt32();
            }
            return(addresses);
        }
Exemplo n.º 2
0
        public ResourceDirectoryBuffer(IOffsetConverter offsetConverter)
        {
            if (offsetConverter == null)
            {
                throw new ArgumentNullException("offsetConverter");
            }

            DirectoryTable     = new DirectoryTableBuffer(offsetConverter);
            DataTable          = new DataTableBuilder();
            DataDirectoryTable = new DataDirectoryTableBuffer(DataTable, offsetConverter);
        }
Exemplo n.º 3
0
        public ImportDirectoryBuffer(IOffsetConverter offsetConverter, bool is32Bit)
        {
            Is32Bit = is32Bit;
            if (offsetConverter == null)
            {
                throw new ArgumentNullException("offsetConverter");
            }

            _offsetConverter = offsetConverter;

            ModuleImportTable = new ModuleImportTableBuffer();
            NameTable         = new NameTableBuffer();
            LookupTables      = new LookupTablesBuffer(_offsetConverter, NameTable);
            AddressTables     = new LookupTablesBuffer(_offsetConverter, NameTable);
        }
        public ResourceDirectoryBuilder(NetAssemblyBuilder builder, IOffsetConverter offsetConverter, ImageResourceDirectory rootDirectory)
        {
            if (builder == null)
                throw new ArgumentNullException("builder");
            if (offsetConverter == null)
                throw new ArgumentNullException("offsetConverter");
            if (rootDirectory == null)
                throw new ArgumentNullException("rootDirectory");

            _offsetConverter = offsetConverter;
            _rootDirectory = rootDirectory;

            _resourceDirectory = builder.Assembly.NtHeaders.OptionalHeader.DataDirectories[ImageDataDirectory.ResourceDirectoryIndex];

            Segments.Add(_directoryTablesBuilder = new DirectoryTablesBuilder(_resourceDirectory, offsetConverter));
            Segments.Add(_dataDirectoryTableBuilder = new DataDirectoryTablesBuilder(_dataTableBuilder, offsetConverter));
            Segments.Add(_dataTableBuilder);
        }
Exemplo n.º 5
0
        public ExportDirectoryBuffer(ImageExportDirectory exportDirectory, IOffsetConverter converter)
        {
            if (exportDirectory == null)
            {
                throw new ArgumentNullException("exportDirectory");
            }
            _converter = converter;

            Segments.Add(_exportDirectory  = exportDirectory);
            Segments.Add(_nameSegment      = DataSegment.CreateAsciiString(_exportDirectory.Name, true));
            Segments.Add(_nameRvaTable     = new SimpleFileSegmentBuilder());
            Segments.Add(_nameOrdinalTable = new SimpleFileSegmentBuilder());
            Segments.Add(_addressesTable   = new SimpleFileSegmentBuilder());
            Segments.Add(_namesTable       = new SimpleFileSegmentBuilder());

            foreach (var export in exportDirectory.Exports)
            {
                AddSymbolExport(export);
            }
        }
        public ImageImportDirectoryBuilder(IOffsetConverter offsetConverter, ImageImportDirectory directory)
        {
            if (offsetConverter == null)
                throw new ArgumentNullException("offsetConverter");
            if (directory == null)
                throw new ArgumentNullException("directory");

            _offsetConverter = offsetConverter;
            _directory = directory;

            _entryTableBuilder = new FileSegmentBuilder();
            _nameTableBuilder = new NameTableBuilder();
            _lookupTablesBuilder = new LookupTablesBuilder(_offsetConverter, _nameTableBuilder);
            AddressTablesBuilder = new LookupTablesBuilder(_offsetConverter, _nameTableBuilder);

            //Segments.Add(_addressTablesBuilder);
            Segments.Add(_entryTableBuilder);
            Segments.Add(_lookupTablesBuilder);
            Segments.Add(_nameTableBuilder);
        }
Exemplo n.º 7
0
        public ResourceDirectoryBuilder(NetAssemblyBuilder builder, IOffsetConverter offsetConverter, ImageResourceDirectory rootDirectory)
        {
            if (builder == null)
            {
                throw new ArgumentNullException("builder");
            }
            if (offsetConverter == null)
            {
                throw new ArgumentNullException("offsetConverter");
            }
            if (rootDirectory == null)
            {
                throw new ArgumentNullException("rootDirectory");
            }

            _offsetConverter = offsetConverter;
            _rootDirectory   = rootDirectory;

            _resourceDirectory = builder.Assembly.NtHeaders.OptionalHeader.DataDirectories[ImageDataDirectory.ResourceDirectoryIndex];

            Segments.Add(_directoryTablesBuilder    = new DirectoryTablesBuilder(_resourceDirectory, offsetConverter));
            Segments.Add(_dataDirectoryTableBuilder = new DataDirectoryTablesBuilder(_dataTableBuilder, offsetConverter));
            Segments.Add(_dataTableBuilder);
        }
        public ImageImportDirectoryBuilder(IOffsetConverter offsetConverter, ImageImportDirectory directory)
        {
            if (offsetConverter == null)
            {
                throw new ArgumentNullException("offsetConverter");
            }
            if (directory == null)
            {
                throw new ArgumentNullException("directory");
            }

            _offsetConverter = offsetConverter;
            _directory       = directory;

            _entryTableBuilder   = new FileSegmentBuilder();
            _nameTableBuilder    = new NameTableBuilder();
            _lookupTablesBuilder = new LookupTablesBuilder(_offsetConverter, _nameTableBuilder);
            AddressTablesBuilder = new LookupTablesBuilder(_offsetConverter, _nameTableBuilder);

            //Segments.Add(_addressTablesBuilder);
            Segments.Add(_entryTableBuilder);
            Segments.Add(_lookupTablesBuilder);
            Segments.Add(_nameTableBuilder);
        }
Exemplo n.º 9
0
 public PointerSegment(FileSegment reference, IOffsetConverter offsetConverter, bool is32Bit)
 {
     Reference = reference;
     OffsetConverter = offsetConverter;
     Is32Bit = is32Bit;
 }
Exemplo n.º 10
0
 public LookupTablesBuffer(IOffsetConverter offsetConverter, NameTableBuffer nameTableBuffer)
 {
     _offsetConverter = offsetConverter;
     _nameTableBuffer = nameTableBuffer;
 }
 public LookupTablesBuilder(IOffsetConverter offsetConverter, NameTableBuilder nameTableBuilder)
 {
     _offsetConverter = offsetConverter;
     _nameTableBuilder = nameTableBuilder;
 }
Exemplo n.º 12
0
 public DataDirectoryTablesBuilder(DataTableBuilder dataTableBuilder, IOffsetConverter offsetConverter)
 {
     _dataTableBuilder = dataTableBuilder;
     _offsetConverter = offsetConverter;
 }
Exemplo n.º 13
0
 public DirectoryTablesBuilder(ImageDataDirectory resourceDirectory, IOffsetConverter offsetConverter)
 {
     _resourceDirectory = resourceDirectory;
     _offsetConverter = offsetConverter;
 }
Exemplo n.º 14
0
 public long GetRva(IOffsetConverter converter)
 {
     return(converter.FileOffsetToRva(StartOffset));
 }
Exemplo n.º 15
0
 public DataDirectoryTableBuffer(DataTableBuilder dataTableBuilder, IOffsetConverter offsetConverter)
 {
     _dataTableBuilder = dataTableBuilder;
     _offsetConverter  = offsetConverter;
 }
Exemplo n.º 16
0
 public DirectoryTableBuffer(IOffsetConverter offsetConverter)
 {
     _offsetConverter = offsetConverter;
 }
Exemplo n.º 17
0
 public DirectoryTablesBuilder(ImageDataDirectory resourceDirectory, IOffsetConverter offsetConverter)
 {
     _resourceDirectory = resourceDirectory;
     _offsetConverter   = offsetConverter;
 }
Exemplo n.º 18
0
 public PointerSegment(FileSegment reference, IOffsetConverter offsetConverter, bool is32Bit)
 {
     Reference       = reference;
     OffsetConverter = offsetConverter;
     Is32Bit         = is32Bit;
 }
Exemplo n.º 19
0
        private Dictionary <uint, uint> ReadOrdinalRvaTable(IBinaryStreamReader reader, IOffsetConverter converter)
        {
            var dictionary = new Dictionary <uint, uint>();

            if (NumberOfNames > 0)
            {
                var nameOrdinalReader = reader.CreateSubReader(converter.RvaToFileOffset(AddressOfNameOrdinals));
                var nameRvaReader     = reader.CreateSubReader(converter.RvaToFileOffset(AddressOfNames));

                for (int i = 0; i < NumberOfNames; i++)
                {
                    dictionary.Add(nameOrdinalReader.ReadUInt16() + OrdinalBase, nameRvaReader.ReadUInt32());
                }
            }
            return(dictionary);
        }