Beispiel #1
0
        public FieldData(FieldInfo fieldInfo, BinaryReader reader, bool dat64 = false)
        {
            x64       = dat64;
            FieldInfo = fieldInfo;
            var offset = reader.GetDataSectionOffset();
            var dict   = new Dictionary <string, object>();

            dict["offset"] = offset;
            if (x64)
            {
                Data = TypeFactory64.CreateData(fieldInfo.FieldType, reader, dict);
            }
            else
            {
                Data = TypeFactory.CreateData(fieldInfo.FieldType, reader, dict);
            }
        }
Beispiel #2
0
        public ListData(ListDataType64 type, BinaryReader reader, Dictionary <string, object> options)
            : base(type)
        {
            x64 = true;

            if (!options.ContainsKey("count") || !options.ContainsKey("offset"))
            {
                throw new Exception("Wrong parameters for reading ListData");
            }

            ListType = type.ListType;

            // moving to start of list
            Offset = (int)options["offset"];
            reader.BaseStream.Seek(DatContainer.DataSectionOffset + Offset, SeekOrigin.Begin);

            Count  = (int)options["count"];
            List   = new List <AbstractData>(Count);
            Length = ListType.Width * Count;
            if (Count <= 0)
            {
                return;
            }

            // Count > 0
            var currentOffset = reader.GetDataSectionOffset();

            for (var i = 0; i < Count; ++i)
            {
                // given fixed size of ListType
                var listEntryOffset = currentOffset + i * ListType.Width;
                var dict            = new Dictionary <string, object>
                {
                    ["offset"] = listEntryOffset
                };
                var data = TypeFactory64.CreateData(ListType, reader, dict); ///wdaadawdafaf
                List.Add(data);
            }

            DatContainer.DataEntries[Offset] = this;
        }
Beispiel #3
0
        public PointerData(PointerDataType dataType, BinaryReader reader, Dictionary <string, object> options)
            : base(dataType)
        {
            if (!options.ContainsKey("offset"))
            {
                throw new Exception("Wrong parameters for reading ListData");
            }

            RefType = dataType.RefType;
            Length  = RefType.PointerWidth;

            // moving to start of pointer so that RefType can read it's own options from that point
            Offset = (int)options["offset"];
            reader.BaseStream.Seek(DatContainer.DataSectionOffset + Offset, SeekOrigin.Begin);

            // only RefType knows how to read it's parameters
            var refParams = RefType.ReadPointer(reader);

            var listDataType = RefType as ListDataType;

            if (listDataType != null)
            {
                RefData = (Length == 8) ? TypeFactory.CreateData(listDataType, reader, refParams) : TypeFactory64.CreateData(listDataType, reader, refParams); //8 or 16
            }
            else
            {
                RefData = (Length == 4) ? TypeFactory.CreateData(RefType, reader, refParams) : TypeFactory64.CreateData(RefType, reader, refParams); //4 or 8
            }
            DatContainer.DataPointers[Offset] = this;
        }