Exemplo n.º 1
0
 internal ResourceDirectoryEntry(DataDirectory dataDirectory, Location dataLocation, ResourceDirectory parentDirectory, IMAGE_RESOURCE_DIRECTORY_ENTRY directoryEntry)
     : base(dataDirectory,dataLocation)
 {
     parent_directory = parentDirectory;
     entry = directoryEntry;
     name = null;
     directory = null;
     data = null;
 }
Exemplo n.º 2
0
        internal ResourceDirectoryEntry(PortableExecutableImage image, DataDirectory dataDirectory, Location location, ResourceDirectory parentDirectory, IMAGE_RESOURCE_DIRECTORY_ENTRY entry) : base(image, dataDirectory, location)
        {
            _name      = null;
            _directory = null;
            _data      = null;

            ParentDirectory = parentDirectory;
            NameType        = ((entry.Name & 0x80000000) == 0x80000000 ? NameType.Name : NameType.ID);
            OffsetType      = ((entry.OffsetToData & 0x80000000) == 0x80000000 ? OffsetType.Directory : OffsetType.Data);

            Name         = entry.Name;
            OffsetToData = entry.OffsetToData;
        }
Exemplo n.º 3
0
        public async Task <ResourceDataEntry> GetDataEntryAsync()
        {
            if (_data == null && (OffsetToData & 0x80000000) != 0x80000000)
            {
                var calc       = Image.GetCalculator();
                var offset     = OffsetToData & 0x7fffffff;
                var rva        = DataDirectory.VirtualAddress + offset;
                var va         = Image.NTHeaders.OptionalHeader.ImageBase + rva;
                var fileOffset = calc.RVAToOffset(rva);
                var size       = Utils.SizeOf <IMAGE_RESOURCE_DATA_ENTRY>().ToUInt32();
                var section    = calc.RVAToSection(rva);
                var location   = new Location(Image, fileOffset, rva, va, size, size, section);

                _data = new ResourceDataEntry(Image, DataDirectory, location, this);

                await _data.LoadAsync().ConfigureAwait(false);
            }

            return(_data);
        }
Exemplo n.º 4
0
 internal ResourceData(PortableExecutableImage image, DataDirectory dataDirectory, Location location, ResourceDataEntry entry) : base(image, dataDirectory, location)
 {
     Entry = entry;
 }
Exemplo n.º 5
0
        public ResourceDataEntry GetDataEntry()
        {
            if (data == null && ((entry.OffsetToData & 0x80000000) != 0x80000000))
            {
                LocationCalculator calc = DataDirectory.Directories.Image.GetCalculator();

                uint offset = entry.OffsetToData & 0x7fffffff;
                uint rva = DataDirectory.VirtualAddress + offset;
                ulong va = DataDirectory.Directories.Image.NTHeaders.OptionalHeader.ImageBase + rva;
                ulong file_offset = calc.RVAToOffset(rva);
                uint size = Utils.SizeOf<IMAGE_RESOURCE_DATA_ENTRY>().ToUInt32();
                Section section = calc.RVAToSection(rva);
                Location location = new Location(file_offset, rva, va, size, size, section);

                data = new ResourceDataEntry(DataDirectory,location,this);
            }

            return data;
        }
Exemplo n.º 6
0
 internal ResourceData(DataDirectory dataDirectory, Location dataLocation, ResourceDataEntry dataEntry)
     : base(dataDirectory,dataLocation)
 {
     data_entry = dataEntry;
 }