Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
            }
        }