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);
        }
Example #3
0
        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;
            }
        }
Example #5
0
        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);
            }
        }