internal static ResourceTable Load(IBinaryAccessor accessor, long basePosition) { var table = new ResourceTable(); Load(accessor, table, basePosition); return(table); }
public ResourceTable Clone() { var copy = new ResourceTable(); CopyTo(copy); return(copy); }
internal new static ResourceTableEntry Load(IBinaryAccessor accessor, long basePosition) { var entry = new ResourceTableEntry(); entry._table = ResourceTable.Load(accessor, basePosition); entry._table._parent = entry; return(entry); }
protected void CopyTo(ResourceTable copy) { copy._majorVersion = _majorVersion; copy._minorVersion = _minorVersion; copy._timeDateStamp = _timeDateStamp; foreach (var childNode in _list) { var copyChildNode = childNode.Clone(); copy._list.Add(copyChildNode); copyChildNode._parent = this; } }
private void WriteTable(TableData tableData) { ResourceTable table = tableData.Table; _state.Blob.Write(ref _state.TreePos, (int)0); // Characteristics _state.Blob.Write(ref _state.TreePos, (int)PE.TimeDateStamp.To_time_t()); _state.Blob.Write(ref _state.TreePos, (ushort)table.MajorVersion); _state.Blob.Write(ref _state.TreePos, (ushort)table.MinorVersion); _state.Blob.Write(ref _state.TreePos, (ushort)tableData.NumberOfNamedEntries); _state.Blob.Write(ref _state.TreePos, (ushort)tableData.NumberOfIdEntries); foreach (EntryData entryData in tableData.Entries) { WriteEntry(entryData); } }
internal static unsafe void Load(IBinaryAccessor accessor, ResourceTable table, long basePosition) { ResourceTableHeader tableHeader; fixed(byte *pBuff = accessor.ReadBytes(sizeof(ResourceTableHeader))) { tableHeader = *(ResourceTableHeader *)pBuff; } table._majorVersion = tableHeader.MajorVersion; table._minorVersion = tableHeader.MinorVersion; table._timeDateStamp = ConvertUtils.ToDateTime(tableHeader.TimeDateStamp); int numberOfEntries = tableHeader.NumberOfNamedEntries + tableHeader.NumberOfIdEntries; for (int i = 0; i < numberOfEntries; i++) { var entry = ResourceEntry.Load(accessor, basePosition); entry._parent = table; table._list.Add(entry); } }
public static ResourceTable Load(PEImage image) { if (image == null) { return(null); } var dd = image.Directories[DataDirectories.ResourceTable]; if (dd.IsNull) { return(null); } using (var accessor = image.OpenImageToSectionData(dd.RVA)) { var table = new ResourceTable(image); Load(accessor, table, accessor.Position); return(table); } }