private void FrmQueryDateEdit_Load(object sender, EventArgs e) { this.lblFieldName.Text = this.FieldDisplayName; if (!string.IsNullOrEmpty(FieldDefaultValue)) { string[] itemArray = FieldDefaultValue.Split('~'); if (itemArray != null) { DateTime value; bool result = false; if (itemArray.Length > 0) { result = DateTime.TryParse(itemArray[0].Trim(), out value); if (result) { this.dtStart.DateTime = value; } } if (itemArray.Length > 1) { result = DateTime.TryParse(itemArray[1].Trim(), out value); if (result) { this.dtEnd.DateTime = value; } } } } this.dtStart.Focus(); }
private void FrmQueryNumericEdit_Load(object sender, EventArgs e) { txtStart.Text = ""; txtEnd.Text = ""; this.lblFieldName.Text = this.FieldDisplayName; if (!string.IsNullOrEmpty(FieldDefaultValue)) { string[] itemArray = FieldDefaultValue.Split('~'); if (itemArray != null) { decimal value = 0M; bool result = false; if (itemArray.Length > 0) { result = decimal.TryParse(itemArray[0].Trim(), out value); if (result) { this.txtStart.Value = value; } } if (itemArray.Length > 1) { result = decimal.TryParse(itemArray[1].Trim(), out value); if (result) { this.txtEnd.Value = value; } } } } this.txtStart.Focus(); }
public Il2CppInspector(Il2CppBinary binary, Metadata metadata) { // Store stream representations Binary = binary; Metadata = metadata; // Get all field default values foreach (var fdv in Metadata.FieldDefaultValues) { // No default if (fdv.dataIndex == -1) { FieldDefaultValue.Add(fdv.fieldIndex, null); continue; } // Get pointer in binary to default value var pValue = Metadata.Header.fieldAndParameterDefaultValueDataOffset + fdv.dataIndex; var type = TypeUsages[fdv.typeIndex]; // Default value is null if (pValue == 0) { FieldDefaultValue.Add(fdv.fieldIndex, null); continue; } object value = null; Metadata.Position = pValue; switch (type.type) { case Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN: value = Metadata.ReadBoolean(); break; case Il2CppTypeEnum.IL2CPP_TYPE_U1: case Il2CppTypeEnum.IL2CPP_TYPE_I1: value = Metadata.ReadByte(); break; case Il2CppTypeEnum.IL2CPP_TYPE_CHAR: // UTF-8 character assumed value = BitConverter.ToChar(Metadata.ReadBytes(2), 0); break; case Il2CppTypeEnum.IL2CPP_TYPE_U2: value = Metadata.ReadUInt16(); break; case Il2CppTypeEnum.IL2CPP_TYPE_I2: value = Metadata.ReadInt16(); break; case Il2CppTypeEnum.IL2CPP_TYPE_U4: value = Metadata.ReadUInt32(); break; case Il2CppTypeEnum.IL2CPP_TYPE_I4: value = Metadata.ReadInt32(); break; case Il2CppTypeEnum.IL2CPP_TYPE_U8: value = Metadata.ReadUInt64(); break; case Il2CppTypeEnum.IL2CPP_TYPE_I8: value = Metadata.ReadInt64(); break; case Il2CppTypeEnum.IL2CPP_TYPE_R4: value = Metadata.ReadSingle(); break; case Il2CppTypeEnum.IL2CPP_TYPE_R8: value = Metadata.ReadDouble(); break; case Il2CppTypeEnum.IL2CPP_TYPE_STRING: var uiLen = Metadata.ReadInt32(); value = Encoding.UTF8.GetString(Metadata.ReadBytes(uiLen)); break; } FieldDefaultValue.Add(fdv.fieldIndex, value); } // Get all field offsets // Versions from 22 onwards use an array of pointers in Binary.FieldOffsetData bool fieldOffsetsArePointers = (Metadata.Version >= 22); // Some variants of 21 also use an array of pointers if (Metadata.Version == 21) { var f = Binary.FieldOffsetData; // We detect this by relying on the fact Module, Object, ValueType, Attribute, _Attribute and Int32 // are always the first six defined types, and that all but Int32 have no fields fieldOffsetsArePointers = (f[0] == 0 && f[1] == 0 && f[2] == 0 && f[3] == 0 && f[4] == 0 && f[5] > 0); } // All older versions use values directly in the array if (!fieldOffsetsArePointers) { FieldOffsets = Binary.FieldOffsetData.ToList(); } // Convert pointer list into fields else { var offsets = new Dictionary <int, int>(); for (var i = 0; i < TypeDefinitions.Length; i++) { var def = TypeDefinitions[i]; var pFieldOffsets = Binary.FieldOffsetData[i]; if (pFieldOffsets != 0) { Binary.Image.Stream.Position = Binary.Image.MapVATR((uint)pFieldOffsets); for (var f = 0; f < def.field_count; f++) { offsets.Add(def.fieldStart + f, Binary.Image.Stream.ReadInt32()); } } } FieldOffsets = offsets.OrderBy(x => x.Key).Select(x => x.Value).ToList(); } }