Exemple #1
0
        public ResourceElementVM(ResourceElementOptions options, ModuleDef ownerModule, bool canDeserialize)
        {
            origOptions         = options;
            this.canDeserialize = canDeserialize;

            BooleanVM             = new BooleanVM(a => HasErrorUpdated());
            CharVM                = new CharVM(a => HasErrorUpdated());
            ByteVM                = new ByteVM(a => HasErrorUpdated());
            SByteVM               = new SByteVM(a => HasErrorUpdated());
            Int16VM               = new Int16VM(a => HasErrorUpdated());
            UInt16VM              = new UInt16VM(a => HasErrorUpdated());
            Int32VM               = new Int32VM(a => HasErrorUpdated());
            UInt32VM              = new UInt32VM(a => HasErrorUpdated());
            Int64VM               = new Int64VM(a => HasErrorUpdated());
            UInt64VM              = new UInt64VM(a => HasErrorUpdated());
            SingleVM              = new SingleVM(a => HasErrorUpdated());
            DoubleVM              = new DoubleVM(a => HasErrorUpdated());
            DecimalVM             = new DecimalVM(a => HasErrorUpdated());
            DateTimeVM            = new DateTimeVM(a => HasErrorUpdated());
            TimeSpanVM            = new TimeSpanVM(a => HasErrorUpdated());
            UserTypeVM            = new UserTypeVM(ownerModule, canDeserialize);
            ResourceElementTypeVM = new EnumListVM(resourceElementTypeList, (a, b) => OnResourceElementTypeChanged());

            UserTypeVM.PropertyChanged += (s, e) => {
                if (e.PropertyName == nameof(UserTypeVM.HasError))
                {
                    HasErrorUpdated();
                }
            };

            Reinitialize();
        }
Exemple #2
0
 public GoToOffsetVM(ulong offset, ulong min, ulong max)
 {
     this.offsetVM = new UInt64VM(offset, a => HasErrorUpdated()) {
         Min = min,
         Max = max,
     };
 }
        public ResourceElementVM(ResourceElementOptions options, ModuleDef ownerModule, bool canDeserialize)
        {
            this.origOptions    = options;
            this.canDeserialize = canDeserialize;

            this.booleanVM             = new BooleanVM(a => HasErrorUpdated());
            this.charVM                = new CharVM(a => HasErrorUpdated());
            this.byteVM                = new ByteVM(a => HasErrorUpdated());
            this.sbyteVM               = new SByteVM(a => HasErrorUpdated());
            this.int16VM               = new Int16VM(a => HasErrorUpdated());
            this.uint16VM              = new UInt16VM(a => HasErrorUpdated());
            this.int32VM               = new Int32VM(a => HasErrorUpdated());
            this.uint32VM              = new UInt32VM(a => HasErrorUpdated());
            this.int64VM               = new Int64VM(a => HasErrorUpdated());
            this.uint64VM              = new UInt64VM(a => HasErrorUpdated());
            this.singleVM              = new SingleVM(a => HasErrorUpdated());
            this.doubleVM              = new DoubleVM(a => HasErrorUpdated());
            this.decimalVM             = new DecimalVM(a => HasErrorUpdated());
            this.dateTimeVM            = new DateTimeVM(a => HasErrorUpdated());
            this.timeSpanVM            = new TimeSpanVM(a => HasErrorUpdated());
            this.userTypeVM            = new UserTypeVM(ownerModule, canDeserialize);
            this.resourceElementTypeVM = new EnumListVM(resourceElementTypeList, (a, b) => OnResourceElementTypeChanged());

            this.UserTypeVM.PropertyChanged += (s, e) => {
                if (e.PropertyName == "HasError")
                {
                    HasErrorUpdated();
                }
            };

            Reinitialize();
        }
Exemple #4
0
        public CilBodyVM(CilBodyOptions options, ModuleDef ownerModule, Language language, TypeDef ownerType, MethodDef ownerMethod)
        {
            this.ownerModule = ownerModule;
            this.ownerMethod = ownerMethod;
            this.origOptions = options;

            typeSigCreatorOptions = new TypeSigCreatorOptions(ownerModule, language)
            {
                CanAddGenericTypeVar   = ownerType.HasGenericParameters,
                CanAddGenericMethodVar = ownerMethod.MethodSig.GetGenParamCount() > 0,
                OwnerType   = ownerType,
                OwnerMethod = ownerMethod,
            };

            this.localsListVM                                  = new IndexObservableCollection <LocalVM>(() => new LocalVM(typeSigCreatorOptions, new LocalOptions(new Local(ownerModule.CorLibTypes.Int32))));
            this.instructionsListVM                            = new IndexObservableCollection <InstructionVM>(() => CreateInstructionVM());
            this.exceptionHandlersListVM                       = new IndexObservableCollection <ExceptionHandlerVM>(() => new ExceptionHandlerVM(typeSigCreatorOptions, new ExceptionHandlerOptions()));
            this.LocalsListVM.UpdateIndexesDelegate            = LocalsUpdateIndexes;
            this.InstructionsListVM.UpdateIndexesDelegate      = InstructionsUpdateIndexes;
            this.ExceptionHandlersListVM.UpdateIndexesDelegate = ExceptionHandlersUpdateIndexes;
            this.InstructionsListVM.CollectionChanged         += InstructionsListVM_CollectionChanged;
            this.LocalsListVM.CollectionChanged               += LocalsListVM_CollectionChanged;
            this.ExceptionHandlersListVM.CollectionChanged    += ExceptionHandlersListVM_CollectionChanged;
            this.maxStack         = new UInt16VM(a => CallHasErrorUpdated());
            this.localVarSigTok   = new UInt32VM(a => CallHasErrorUpdated());
            this.headerSize       = new ByteVM(a => CallHasErrorUpdated());
            this.headerRVA        = new UInt32VM(a => CallHasErrorUpdated());
            this.headerFileOffset = new UInt64VM(a => CallHasErrorUpdated());
            this.rva        = new UInt32VM(a => CallHasErrorUpdated());
            this.fileOffset = new UInt64VM(a => CallHasErrorUpdated());

            Reinitialize();
        }
Exemple #5
0
 public GoToOffsetVM(ulong offset, ulong min, ulong max)
 {
     this.offsetVM = new UInt64VM(offset, a => HasErrorUpdated(), false)
     {
         Min = min,
         Max = max,
     };
 }
Exemple #6
0
		public SelectVM(ulong start, ulong end, ulong min, ulong max) {
			this.startVM = new UInt64VM(start, a => HasErrorUpdated(), false) {
				Min = min,
				Max = max,
			};
			this.endVM = new UInt64VM(end, a => HasErrorUpdated(), false) {
				Min = min,
				Max = max,
			};
		}
Exemple #7
0
 public SelectVM(ulong start, ulong end, ulong min, ulong max)
 {
     this.StartVM = new UInt64VM(start, a => HasErrorUpdated(), false)
     {
         Min = min,
         Max = max,
     };
     this.EndVM = new UInt64VM(end, a => HasErrorUpdated(), false)
     {
         Min = min,
         Max = max,
     };
 }
Exemple #8
0
        public LocalSettingsVM(LocalHexSettings options)
        {
            this.origOptions = options;
            this.bytesGroupCountVM = new NullableInt32VM(a => HasErrorUpdated());
            this.bytesPerLineVM = new NullableInt32VM(a => HasErrorUpdated(), true) {
                Min = 0,
                Max = HexEditorSettings.MAX_BYTES_PER_LINE,
            };
            this.hexOffsetSizeVM = new Int32VM(a => HasErrorUpdated(), true) {
                Min = 0,
                Max = 64,
            };
            this.baseOffsetVM = new UInt64VM(a => HasErrorUpdated());
            this.startOffsetVM = new NullableUInt64VM(a => HasErrorUpdated());
            this.endOffsetVM = new NullableUInt64VM(a => HasErrorUpdated());
            this.asciiEncodingVM = new EnumListVM(asciiEncodingList);

            Reinitialize();
        }
Exemple #9
0
        public LocalSettingsVM(LocalHexSettings options)
        {
            this.origOptions       = options;
            this.bytesGroupCountVM = new NullableInt32VM(a => HasErrorUpdated());
            this.bytesPerLineVM    = new NullableInt32VM(a => HasErrorUpdated(), true)
            {
                Min = 0,
                Max = HexSettings.MAX_BYTES_PER_LINE,
            };
            this.hexOffsetSizeVM = new Int32VM(a => HasErrorUpdated(), true)
            {
                Min = 0,
                Max = 64,
            };
            this.baseOffsetVM    = new UInt64VM(a => HasErrorUpdated());
            this.startOffsetVM   = new NullableUInt64VM(a => HasErrorUpdated());
            this.endOffsetVM     = new NullableUInt64VM(a => HasErrorUpdated());
            this.asciiEncodingVM = new EnumListVM(asciiEncodingList);

            Reinitialize();
        }
Exemple #10
0
        public LocalSettingsVM(LocalGroupOptions options, LocalGroupOptions defaultOptions)
        {
            origOptions         = options;
            this.defaultOptions = defaultOptions;
            BytesPerLineVM      = new Int32VM(a => HasErrorUpdated(), true)
            {
                Min = HexBufferLineFormatterOptions.MinBytesPerLine,
                Max = HexBufferLineFormatterOptions.MaxBytesPerLine,
            };
            OffsetBitSizeVM = new Int32VM(a => HasErrorUpdated(), true)
            {
                Min = HexBufferLineFormatterOptions.MinOffsetBitSize,
                Max = HexBufferLineFormatterOptions.MaxOffsetBitSize,
            };
            BasePositionVM           = new UInt64VM(a => HasErrorUpdated());
            StartPositionVM          = new UInt64VM(a => HasErrorUpdated());
            EndPositionVM            = new UInt64VM(a => HasErrorUpdated());
            HexValuesDisplayFormatVM = new EnumListVM(hexValuesDisplayFormatList);

            Reinitialize();
        }
Exemple #11
0
        public CilBodyVM(CilBodyOptions options, ModuleDef ownerModule, IDecompilerService decompilerService, TypeDef ownerType, MethodDef ownerMethod, bool initialize)
        {
            OwnerModule      = ownerModule;
            this.ownerMethod = ownerMethod;
            origOptions      = options;

            TypeSigCreatorOptions = new TypeSigCreatorOptions(ownerModule, decompilerService)
            {
                CanAddGenericTypeVar   = ownerType.HasGenericParameters,
                CanAddGenericMethodVar = ownerMethod.MethodSig.GetGenParamCount() > 0,
                OwnerType   = ownerType,
                OwnerMethod = ownerMethod,
            };

            LocalsListVM                                  = new LocalsIndexObservableCollection(this, () => new LocalVM(TypeSigCreatorOptions, new LocalOptions(new Local(ownerModule.CorLibTypes.Int32))));
            InstructionsListVM                            = new IndexObservableCollection <InstructionVM>(() => CreateInstructionVM());
            ExceptionHandlersListVM                       = new IndexObservableCollection <ExceptionHandlerVM>(() => new ExceptionHandlerVM(TypeSigCreatorOptions, new ExceptionHandlerOptions()));
            LocalsListVM.UpdateIndexesDelegate            = LocalsUpdateIndexes;
            InstructionsListVM.UpdateIndexesDelegate      = InstructionsUpdateIndexes;
            ExceptionHandlersListVM.UpdateIndexesDelegate = ExceptionHandlersUpdateIndexes;
            InstructionsListVM.CollectionChanged         += InstructionsListVM_CollectionChanged;
            LocalsListVM.CollectionChanged               += LocalsListVM_CollectionChanged;
            ExceptionHandlersListVM.CollectionChanged    += ExceptionHandlersListVM_CollectionChanged;
            MaxStack         = new UInt16VM(a => CallHasErrorUpdated());
            LocalVarSigTok   = new UInt32VM(a => CallHasErrorUpdated());
            HeaderSize       = new ByteVM(a => CallHasErrorUpdated());
            HeaderRVA        = new UInt32VM(a => CallHasErrorUpdated());
            HeaderFileOffset = new UInt64VM(a => CallHasErrorUpdated());
            RVA        = new UInt32VM(a => CallHasErrorUpdated());
            FileOffset = new UInt64VM(a => CallHasErrorUpdated());

            if (initialize)
            {
                Reinitialize();
            }
        }
Exemple #12
0
        public ResourceElementVM(ResourceElementOptions options, ModuleDef ownerModule, bool canDeserialize)
        {
            this.origOptions = options;
            this.canDeserialize = canDeserialize;

            this.booleanVM = new BooleanVM(a => HasErrorUpdated());
            this.charVM = new CharVM(a => HasErrorUpdated());
            this.byteVM = new ByteVM(a => HasErrorUpdated());
            this.sbyteVM = new SByteVM(a => HasErrorUpdated());
            this.int16VM = new Int16VM(a => HasErrorUpdated());
            this.uint16VM = new UInt16VM(a => HasErrorUpdated());
            this.int32VM = new Int32VM(a => HasErrorUpdated());
            this.uint32VM = new UInt32VM(a => HasErrorUpdated());
            this.int64VM = new Int64VM(a => HasErrorUpdated());
            this.uint64VM = new UInt64VM(a => HasErrorUpdated());
            this.singleVM = new SingleVM(a => HasErrorUpdated());
            this.doubleVM = new DoubleVM(a => HasErrorUpdated());
            this.decimalVM = new DecimalVM(a => HasErrorUpdated());
            this.dateTimeVM = new DateTimeVM(a => HasErrorUpdated());
            this.timeSpanVM = new TimeSpanVM(a => HasErrorUpdated());
            this.userTypeVM = new UserTypeVM(ownerModule, canDeserialize);
            this.resourceElementTypeVM = new EnumListVM(resourceElementTypeList, (a, b) => OnResourceElementTypeChanged());

            this.UserTypeVM.PropertyChanged += (s, e) => {
                if (e.PropertyName == "HasError")
                    HasErrorUpdated();
            };

            Reinitialize();
        }
Exemple #13
0
		public LocalSettingsVM(LocalGroupOptions options, LocalGroupOptions defaultOptions) {
			origOptions = options;
			this.defaultOptions = defaultOptions;
			BytesPerLineVM = new Int32VM(a => HasErrorUpdated(), true) {
				Min = HexBufferLineProviderOptions.MinBytesPerLine,
				Max = HexBufferLineProviderOptions.MaxBytesPerLine,
			};
			OffsetBitSizeVM = new Int32VM(a => HasErrorUpdated(), true) {
				Min = HexBufferLineProviderOptions.MinOffsetBitSize,
				Max = HexBufferLineProviderOptions.MaxOffsetBitSize,
			};
			BasePositionVM = new UInt64VM(a => HasErrorUpdated());
			StartPositionVM = new UInt64VM(a => HasErrorUpdated());
			EndPositionVM = new UInt64VM(a => HasErrorUpdated());
			HexValuesDisplayFormatVM = new EnumListVM(hexValuesDisplayFormatList);

			Reinitialize();
		}
Exemple #14
0
 public UInt64FlagsHexField(HexBuffer buffer, string parentName, string name, HexPosition start)
     : base(buffer, parentName, name, start, 8)
 {
     data = new UInt64VM(buffer.ReadUInt64(start), a => UpdateValue(), false);
 }
Exemple #15
0
 public UInt64HexField(HexDocument doc, string parentName, string name, ulong start, bool useDecimal = false)
     : base(doc, parentName, name, start, 8)
 {
     this.data = new UInt64VM(doc.ReadUInt64(start), a => UpdateValue(), useDecimal);
 }
Exemple #16
0
 public UInt64FlagsHexField(HexDocument doc, string parentName, string name, ulong start)
     : base(doc, parentName, name, start, 8)
 {
     this.data = new UInt64VM(doc.ReadUInt64(start), a => UpdateValue(), false);
 }
		public ResourceElementVM(ResourceElementOptions options, ModuleDef ownerModule, bool canDeserialize) {
			origOptions = options;
			this.canDeserialize = canDeserialize;

			BooleanVM = new BooleanVM(a => HasErrorUpdated());
			CharVM = new CharVM(a => HasErrorUpdated());
			ByteVM = new ByteVM(a => HasErrorUpdated());
			SByteVM = new SByteVM(a => HasErrorUpdated());
			Int16VM = new Int16VM(a => HasErrorUpdated());
			UInt16VM = new UInt16VM(a => HasErrorUpdated());
			Int32VM = new Int32VM(a => HasErrorUpdated());
			UInt32VM = new UInt32VM(a => HasErrorUpdated());
			Int64VM = new Int64VM(a => HasErrorUpdated());
			UInt64VM = new UInt64VM(a => HasErrorUpdated());
			SingleVM = new SingleVM(a => HasErrorUpdated());
			DoubleVM = new DoubleVM(a => HasErrorUpdated());
			DecimalVM = new DecimalVM(a => HasErrorUpdated());
			DateTimeVM = new DateTimeVM(a => HasErrorUpdated());
			TimeSpanVM = new TimeSpanVM(a => HasErrorUpdated());
			UserTypeVM = new UserTypeVM(ownerModule, canDeserialize);
			ResourceElementTypeVM = new EnumListVM(resourceElementTypeList, (a, b) => OnResourceElementTypeChanged());

			UserTypeVM.PropertyChanged += (s, e) => {
				if (e.PropertyName == nameof(UserTypeVM.HasError))
					HasErrorUpdated();
			};

			Reinitialize();
		}
Exemple #18
0
		public UInt64HexField(HexBuffer buffer, string parentName, string name, HexPosition start, bool useDecimal = false)
			: base(buffer, parentName, name, start, 8) {
			data = new UInt64VM(buffer.ReadUInt64(start), a => UpdateValue(), useDecimal);
		}
Exemple #19
0
		public UInt64FlagsHexField(HexBuffer buffer, string parentName, string name, HexPosition start)
			: base(buffer, parentName, name, start, 8) {
			data = new UInt64VM(buffer.ReadUInt64(start), a => UpdateValue(), false);
		}
Exemple #20
0
 public UInt64HexField(HexBuffer buffer, string parentName, string name, HexPosition start, bool useDecimal = false)
     : base(buffer, parentName, name, start, 8)
 {
     data = new UInt64VM(buffer.ReadUInt64(start), a => UpdateValue(), useDecimal);
 }
Exemple #21
0
 public UInt64HexField(HexDocument doc, string parentName, string name, ulong start, bool useDecimal = false)
     : base(doc, parentName, name, start, 8)
 {
     this.data = new UInt64VM(doc.ReadUInt64(start), a => UpdateValue(), useDecimal);
 }
Exemple #22
0
        public CilBodyVM(CilBodyOptions options, ModuleDef ownerModule, Language language, TypeDef ownerType, MethodDef ownerMethod)
        {
            this.ownerModule = ownerModule;
            this.ownerMethod = ownerMethod;
            this.origOptions = options;

            typeSigCreatorOptions = new TypeSigCreatorOptions(ownerModule, language) {
                CanAddGenericTypeVar = ownerType.HasGenericParameters,
                CanAddGenericMethodVar = ownerMethod.MethodSig.GetGenParamCount() > 0,
                OwnerType = ownerType,
                OwnerMethod = ownerMethod,
            };

            this.localsListVM = new IndexObservableCollection<LocalVM>(() => new LocalVM(typeSigCreatorOptions, new LocalOptions(new Local(ownerModule.CorLibTypes.Int32))));
            this.instructionsListVM = new IndexObservableCollection<InstructionVM>(() => CreateInstructionVM());
            this.exceptionHandlersListVM = new IndexObservableCollection<ExceptionHandlerVM>(() => new ExceptionHandlerVM(typeSigCreatorOptions, new ExceptionHandlerOptions()));
            this.LocalsListVM.UpdateIndexesDelegate = LocalsUpdateIndexes;
            this.InstructionsListVM.UpdateIndexesDelegate = InstructionsUpdateIndexes;
            this.ExceptionHandlersListVM.UpdateIndexesDelegate = ExceptionHandlersUpdateIndexes;
            this.InstructionsListVM.CollectionChanged += InstructionsListVM_CollectionChanged;
            this.LocalsListVM.CollectionChanged += LocalsListVM_CollectionChanged;
            this.ExceptionHandlersListVM.CollectionChanged += ExceptionHandlersListVM_CollectionChanged;
            this.maxStack = new UInt16VM(a => CallHasErrorUpdated());
            this.localVarSigTok = new UInt32VM(a => CallHasErrorUpdated());
            this.headerSize = new ByteVM(a => CallHasErrorUpdated());
            this.headerRVA = new UInt32VM(a => CallHasErrorUpdated());
            this.headerFileOffset = new UInt64VM(a => CallHasErrorUpdated());
            this.rva = new UInt32VM(a => CallHasErrorUpdated());
            this.fileOffset = new UInt64VM(a => CallHasErrorUpdated());

            Reinitialize();
        }
Exemple #23
0
 public UInt64FlagsHexField(StructField <UInt64FlagsData> field)
     : base(field)
 {
     data = new UInt64VM(buffer.ReadUInt64(Span.Start), a => UpdateValue(), false);
 }
Exemple #24
0
 public UInt64HexField(StructField <UInt64Data> field, bool useDecimal = false)
     : base(field)
 {
     data = new UInt64VM(buffer.ReadUInt64(Span.Start), a => UpdateValue(), useDecimal);
 }
Exemple #25
0
 public UInt64FlagsHexField(HexDocument doc, string parentName, string name, ulong start)
     : base(doc, parentName, name, start, 8)
 {
     this.data = new UInt64VM(doc.ReadUInt64(start), a => UpdateValue(), false);
 }
Exemple #26
0
		public ConstantTypeVM(ModuleDef ownerModule, object value, ConstantType[] validConstants, bool allowNullString, bool arraysCanBeNull, TypeSigCreatorOptions options = null) {
			if (options == null) {
				IList<ConstantType> clist = validConstants;
				if (clist.IndexOf(ConstantType.Type) >= 0 ||
					clist.IndexOf(ConstantType.TypeArray) >= 0 ||
					clist.IndexOf(ConstantType.ObjectArray) >= 0) {
					throw new ArgumentNullException();
				}
			}
			this.arraysCanBeNull = arraysCanBeNull;
			var list = validConstants.Select(a => typeToEnumVM[a]);
			this.constantTypeEnumListVM = new EnumListVM(list, (a, b) => OnConstantChanged());
			this.boolean = new BooleanVM(a => FieldUpdated());
			this.@char = new CharVM(a => FieldUpdated());
			this.@sbyte = new SByteVM(a => FieldUpdated());
			this.@byte = new ByteVM(a => FieldUpdated());
			this.int16 = new Int16VM(a => FieldUpdated());
			this.uint16 = new UInt16VM(a => FieldUpdated());
			this.int32 = new Int32VM(a => FieldUpdated());
			this.uint32 = new UInt32VM(a => FieldUpdated());
			this.int64 = new Int64VM(a => FieldUpdated());
			this.uint64 = new UInt64VM(a => FieldUpdated());
			this.single = new SingleVM(a => FieldUpdated());
			this.@double = new DoubleVM(a => FieldUpdated());
			this.@string = new StringVM(a => FieldUpdated(), allowNullString);
			this.@enum = new EnumDataFieldVM(ownerModule, a => FieldUpdated());
			this.type = new TypeSigVM(a => FieldUpdated(), options);
			this.objectArray = new ObjectListDataFieldVM(ownerModule, a => FieldUpdated(), options);
			this.booleanArray = new BooleanListDataFieldVM(a => FieldUpdated());
			this.charArray = new CharListDataFieldVM(a => FieldUpdated());
			this.sbyteArray = new SByteListDataFieldVM(a => FieldUpdated());
			this.byteArray = new ByteListDataFieldVM(a => FieldUpdated());
			this.int16Array = new Int16ListDataFieldVM(a => FieldUpdated());
			this.uint16Array = new UInt16ListDataFieldVM(a => FieldUpdated());
			this.int32Array = new Int32ListDataFieldVM(a => FieldUpdated());
			this.uint32Array = new UInt32ListDataFieldVM(a => FieldUpdated());
			this.int64Array = new Int64ListDataFieldVM(a => FieldUpdated());
			this.uint64Array = new UInt64ListDataFieldVM(a => FieldUpdated());
			this.singleArray = new SingleListDataFieldVM(a => FieldUpdated());
			this.doubleArray = new DoubleListDataFieldVM(a => FieldUpdated());
			this.stringArray = new StringListDataFieldVM(a => FieldUpdated());
			this.enumArray = new EnumListDataFieldVM(ownerModule, a => FieldUpdated());
			this.typeArray = new TypeSigListDataFieldVM(a => FieldUpdated(), options);
			this.Value = value;
		}