Пример #1
0
        internal ResourceDirectory ReadDirectory(ResourceDirectoryEntry entry)
        {
            uint offset = (uint)image.Position;
            var rawDirectory = image.ReadStructure<Structures.IMAGE_RESOURCE_DIRECTORY>();

            return new ResourceDirectory(image, offset, entry, ReadChildEntries(rawDirectory.NumberOfIdEntries +  rawDirectory.NumberOfNamedEntries), rawDirectory);
        }
Пример #2
0
 internal ResourceDirectoryEntry[] ConstructChildEntries(int count)
 {
     ResourceDirectoryEntry[] entries = new ResourceDirectoryEntry[count];
     for (int i = 0; i < count; i++)
         entries[i] = ReadDirectoryEntry((uint)stream.Position);
     return entries;
 }
Пример #3
0
 private void WriteDirectoryEntry(ResourceDirectoryEntry entry)
 {
     if (entry.IsEntryToData)
         WriteDataEntry(entry.DataEntry);
     else
         WriteDirectory(entry.Directory);
 }
Пример #4
0
        internal ResourceDirectoryEntry ReadDirectoryEntry(uint offset)
        {
            var    rawEntry   = ASMGlobals.ReadStructureFromReader <Structures.IMAGE_RESOURCE_DIRECTORY_ENTRY>(reader);
            string customName = string.Empty;
            ResourceDirectoryEntry resourceEntry = new ResourceDirectoryEntry(image, offset, rawEntry, customName);

            return(resourceEntry);
        }
        /// <summary>
        /// Returns the <see cref="RVA"/> of a <see cref="ResourceDirectoryEntry"/>.
        /// <see cref="SetOffset"/> must have been called.
        /// </summary>
        /// <param name="dirEntry">A <see cref="ResourceDirectoryEntry"/></param>
        /// <returns>The RVA or 0 if <paramref name="dirEntry"/> is invalid</returns>
        public RVA GetRVA(ResourceDirectoryEntry dirEntry)
        {
            FileOffset fileOffset;
            RVA        rva;

            GetFileOffsetAndRvaOf(dirEntry, out fileOffset, out rva);
            return(rva);
        }
 uint GetDirectoryEntryOffset(ResourceDirectoryEntry e)
 {
     if (e is ResourceData)
     {
         return(dataHeaderDict[(ResourceData)e]);
     }
     return(0x80000000 | dirDict[(ResourceDirectory)e]);
 }
Пример #7
0
 internal ResourceDirectoryEntry[] ConstructChildEntries(int count)
 {
     ResourceDirectoryEntry[] entries = new ResourceDirectoryEntry[count];
     for (int i = 0; i < count; i++)
     {
         entries[i] = ReadDirectoryEntry((uint)stream.Position);
     }
     return(entries);
 }
Пример #8
0
 internal ResourceDataEntry ReadDataEntry(uint offset, ResourceDirectoryEntry entry)
 {
     if (TrySetOffset(offset))
     {
         var rawDataEntry = ASMGlobals.ReadStructureFromReader<Structures.IMAGE_RESOURCE_DATA_ENTRY>(reader);
         return new ResourceDataEntry(image, resourceDirectory.TargetOffset.FileOffset + offset, entry, rawDataEntry);
     }
     return null;
 }
Пример #9
0
 internal ResourceDataEntry ReadDataEntry(uint offset, ResourceDirectoryEntry entry)
 {
     if (TrySetOffset(offset))
     {
         var rawDataEntry = ASMGlobals.ReadStructureFromReader <Structures.IMAGE_RESOURCE_DATA_ENTRY>(reader);
         return(new ResourceDataEntry(image, resourceDirectory.TargetOffset.FileOffset + offset, entry, rawDataEntry));
     }
     return(null);
 }
Пример #10
0
        internal ResourceDirectory ReadDirectory(uint offset, ResourceDirectoryEntry entry)
        {
            if (TrySetOffset(offset))
            {
                var rawDirectory = ASMGlobals.ReadStructureFromReader <Structures.IMAGE_RESOURCE_DIRECTORY>(reader);

                return(new ResourceDirectory(image, offset, this, entry, rawDirectory));
            }
            return(null);
        }
Пример #11
0
 private void WriteDirectoryEntry(ResourceDirectoryEntry entry)
 {
     if (entry.IsEntryToData)
     {
         WriteDataEntry(entry.DataEntry);
     }
     else
     {
         WriteDirectory(entry.Directory);
     }
 }
Пример #12
0
        internal void FillChildEntries(ref ResourceDirectoryEntry[] entries)
        {
            for (int i = 0; i < entries.Length; i++)
            {

                if (!entries[i].IsEntryToData)
                {
                    entries[i].Directory = ReadDirectory(entries[i].OffsetToData - 0x80000000, entries[i]);
                }
                else
                {
                    entries[i].DataEntry = ReadDataEntry(entries[i].OffsetToData, entries[i]);
                }
            }
        }
Пример #13
0
 private void PopulateDirectoryEntry(TreeNode parentNode, ResourceDirectoryEntry entry)
 {
     TreeNode node = new TreeNode();
     if (entry.IsEntryToData)
     {
         node.Text = "Resource Data Entry";
         node.Tag = entry.DataEntry;
     }
     else
     {
         node.Text = "Resource Directory";
         node.Tag = entry.Directory;
         PopulateDirectory(node, entry.Directory);
     }
     parentNode.Nodes.Add(node);
 }
Пример #14
0
        private void PopulateDirectoryEntry(TreeNode parentNode, ResourceDirectoryEntry entry)
        {
            TreeNode node = new TreeNode();

            if (entry.IsEntryToData)
            {
                node.Text = "Resource Data Entry";
                node.Tag  = entry.DataEntry;
            }
            else
            {
                node.Text = "Resource Directory";
                node.Tag  = entry.Directory;
                PopulateDirectory(node, entry.Directory);
            }
            parentNode.Nodes.Add(node);
        }
Пример #15
0
        internal void FillChildEntries(ref ResourceDirectoryEntry[] entries)
        {
            for (int i = 0; i < entries.Length; i++)
            {

                if (!entries[i].IsEntryToData)
                {
                    image.SetOffset(resourceDirectory.TargetOffset.FileOffset + entries[i].OffsetToData - 0x80000000);
                    entries[i].Directory = ReadDirectory(entries[i]);
                }
                else
                {
                    image.SetOffset(resourceDirectory.TargetOffset.FileOffset + entries[i].OffsetToData);
                    entries[i].DataEntry = ReadDataEntry(entries[i]);
                }
            }
        }
        /// <summary>
        /// Returns the <see cref="FileOffset"/> and <see cref="RVA"/> of a
        /// <see cref="ResourceDirectoryEntry"/>. <see cref="SetOffset"/> must have been called.
        /// </summary>
        /// <param name="dirEntry">A <see cref="ResourceDirectoryEntry"/></param>
        /// <param name="fileOffset">Updated with the file offset</param>
        /// <param name="rva">Updated with the RVA</param>
        /// <returns><c>true</c> if <paramref name="dirEntry"/> is valid and
        /// <paramref name="fileOffset"/> and <paramref name="rva"/> have been updated. <c>false</c>
        /// if <paramref name="dirEntry"/> is not part of the Win32 resources.</returns>
        public bool GetFileOffsetAndRvaOf(ResourceDirectoryEntry dirEntry, out FileOffset fileOffset, out RVA rva)
        {
            var dir = dirEntry as ResourceDirectory;

            if (dir != null)
            {
                return(GetFileOffsetAndRvaOf(dir, out fileOffset, out rva));
            }

            var dataHeader = dirEntry as ResourceData;

            if (dataHeader != null)
            {
                return(GetFileOffsetAndRvaOf(dataHeader, out fileOffset, out rva));
            }

            fileOffset = 0;
            rva        = 0;
            return(false);
        }
Пример #17
0
        ResourceDirectoryEntry CloneResourceDirectoryEntry(ResourceDirectoryEntry old)
        {
            ResourceDirectoryEntry rde;

            if (old.IdentifiedByName)
            {
                rde = new ResourceDirectoryEntry(old.Name);
            }
            else
            {
                rde = new ResourceDirectoryEntry(old.ID);
            }

            if (old.Child is ResourceDirectoryTable)
            {
                rde.Child = CloneResourceDirectoryTable(old.Child as ResourceDirectoryTable);
            }
            else
            {
                rde.Child = CloneResourceDataEntry(old.Child as ResourceDataEntry);
            }

            return(rde);
        }
Пример #18
0
 public MenuResource(PortableExecutableImage image, ResourceType type, ResourceDirectoryEntry entry, ResourceId id) : base(image, type, entry, id)
 {
 }
Пример #19
0
 internal ResourceDataEntry ReadDataEntry(ResourceDirectoryEntry entry)
 {
     uint offset = (uint)image.Position;
     var rawDataEntry = image.ReadStructure<Structures.IMAGE_RESOURCE_DATA_ENTRY>();
     return new ResourceDataEntry(image, offset, entry, rawDataEntry);
 }
Пример #20
0
        internal ResourceDirectoryEntry ReadDirectoryEntry()
        {
            uint offset = (uint)image.Position;
            var rawEntry = image.ReadStructure<Structures.IMAGE_RESOURCE_DIRECTORY_ENTRY>();
            string customName = string.Empty;
            ResourceDirectoryEntry resourceEntry = new ResourceDirectoryEntry(image, offset, rawEntry, customName);

            return resourceEntry;
        }
Пример #21
0
		ResourceDirectoryEntry CloneResourceDirectoryEntry (ResourceDirectoryEntry old)
		{
			ResourceDirectoryEntry rde;
			if (old.IdentifiedByName)
				rde = new ResourceDirectoryEntry(old.Name);
			else
				rde = new ResourceDirectoryEntry (old.ID);

			if (old.Child is ResourceDirectoryTable)
				rde.Child = CloneResourceDirectoryTable (old.Child as ResourceDirectoryTable);
			else
				rde.Child = CloneResourceDataEntry (old.Child as ResourceDataEntry);

			return rde;
		}
Пример #22
0
        internal ResourceDirectoryEntry ReadDirectoryEntry(uint offset)
        {
            var rawEntry = ASMGlobals.ReadStructureFromReader<Structures.IMAGE_RESOURCE_DIRECTORY_ENTRY>(reader);
            string customName = string.Empty;
            ResourceDirectoryEntry resourceEntry = new ResourceDirectoryEntry(image, offset, rawEntry, customName);

            return resourceEntry;
        }
Пример #23
0
        internal ResourceDirectory ReadDirectory(uint offset, ResourceDirectoryEntry entry)
        {
            if (TrySetOffset(offset))
            {
                var rawDirectory = ASMGlobals.ReadStructureFromReader<Structures.IMAGE_RESOURCE_DIRECTORY>(reader);

                return new ResourceDirectory(image, offset, this, entry, rawDirectory);
            }
            return null;
        }