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; }