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); }
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; }
private void WriteDirectoryEntry(ResourceDirectoryEntry entry) { if (entry.IsEntryToData) WriteDataEntry(entry.DataEntry); else WriteDirectory(entry.Directory); }
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]); }
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); }
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; }
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); }
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); }
private void WriteDirectoryEntry(ResourceDirectoryEntry entry) { if (entry.IsEntryToData) { WriteDataEntry(entry.DataEntry); } else { WriteDirectory(entry.Directory); } }
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]); } } }
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); }
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); }
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); }
public MenuResource(PortableExecutableImage image, ResourceType type, ResourceDirectoryEntry entry, ResourceId id) : base(image, type, entry, id) { }
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); }
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; }
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; }
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; }
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; }