Example #1
0
 public virtual object ReadValue(System.Reflection.FieldInfo f, ImageReader rdr, ReaderContext ctx)
 {
     Func<ImageReader, object> fn;
     if (readers.TryGetValue(f.FieldType, out fn))
     {
         return fn(rdr);
     }
     throw new NotSupportedException(string.Format("Field type {0} not supported.", f.FieldType.FullName));
 }
Example #2
0
 public override object ReadValue(FieldInfo f, ImageReader rdr, ReaderContext ctx)
 {
     int i = 0;
     for (; rdr.PeekByte(i) != 0; ++i)
     {
     }
     var s = Encoding.UTF8.GetString(rdr.ReadBytes(i));
     rdr.Offset++;
     return s;
 }
Example #3
0
        public static object ReadPointer(Type pointerType, int size, ImageReader rdr, ReaderContext ctx)
        {
            Debug.Print("Reading pointer at offset {0}, size {1}", rdr.Offset, size);
            uint newOffset;
            switch (size)
            {
            default:
                throw new InvalidOperationException("Field size must be > 0.");
            case 1: newOffset = rdr.ReadByte(); break;
            case 2: newOffset = rdr.ReadUInt16(); break;
            case 4: newOffset = rdr.ReadUInt32(); break;
            }
            Debug.Print("Structure of type {0} must start at offset {1:X}", pointerType.Name, newOffset);
            rdr = rdr.Clone();
            rdr.Offset = newOffset;

            var dst = Activator.CreateInstance(pointerType);
            var sr = new StructureReader(dst);
            sr.Read(rdr);
            return dst;
        }
Example #4
0
        public static object ReadPointer(Type pointerType, int size, ImageReader rdr, ReaderContext ctx)
        {
            Debug.Print("Reading pointer at offset {0}, size {1}", rdr.Offset, size);
            uint newOffset;

            switch (size)
            {
            default:
                throw new InvalidOperationException("Field size must be > 0.");

            case 1: newOffset = rdr.ReadByte(); break;

            case 2: newOffset = rdr.ReadUInt16(); break;

            case 4: newOffset = rdr.ReadUInt32(); break;
            }
            Debug.Print("Structure of type {0} must start at offset {1:X}", pointerType.Name, newOffset);
            rdr        = rdr.Clone();
            rdr.Offset = newOffset;

            var dst = Activator.CreateInstance(pointerType);
            var sr  = new StructureReader(dst);

            sr.Read(rdr);
            return(dst);
        }
Example #5
0
 public override object ReadValue(FieldInfo f, EndianImageReader rdr, ReaderContext ctx)
 {
     return(ReadPointer(f.FieldType, Size, rdr, ctx));
 }
Example #6
0
        public virtual object ReadValue(System.Reflection.FieldInfo f, EndianImageReader rdr, ReaderContext ctx)
        {
            Func <EndianImageReader, object> fn;

            if (readers.TryGetValue(f.FieldType, out fn))
            {
                return(fn(rdr));
            }
            throw new NotSupportedException(string.Format("Field type {0} not supported.", f.FieldType.FullName));
        }
Example #7
0
 public override object ReadValue(FieldInfo f, ImageReader rdr, ReaderContext ctx)
 {
     return ReadPointer(f.FieldType, Size, rdr, ctx);
 }
Example #8
0
 public override object ReadValue(FieldInfo f, ImageReader rdr, ReaderContext ctx)
 {
     var elemType = f.FieldType.GetElementType(); 
     if (Length > 0)
     {
         Debug.Print("Array: at offset {0}, reading {1} entries", rdr.Offset, Length);
         var a = (Array) Activator.CreateInstance(f.FieldType, Length);
         if (PointerElementSize > 0)
         {
             for (int i = 0; i < Length; ++i)
             {
                 var value= PointerFieldAttribute.ReadPointer(elemType, PointerElementSize, rdr, ctx);
                 a.SetValue(value, i);
             }
             return a;
         }
         throw new NotImplementedException();
     }
     throw new NotImplementedException();
 }