コード例 #1
0
        object ReadList()
        {
            object ret = ReadObject();

            //Type t = ret.GetType().GetInterfaces().Where(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IList<>)).First();
            Type t = ret.GetType();
            DynamicMethodDelegate dmd = DynamicMethodDelegateFactory.CreateDelegate(t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public, null, t.GetGenericArguments(), null));

            TypeMarker elemt = (TypeMarker)reader.ReadByte();
            int        len   = (int)ReadVInt();

            if (TypeMarkerUtil.IsFinal(elemt))
            {
                for (int i = 0; i < len; i++)
                {
                    dmd(ret, new[] { ReadValue(elemt) });
                }
            }
            else
            {
                for (int i = 0; i < len; i++)
                {
                    dmd(ret, new[] { ReadValue() });
                }
            }
            return(ret);
        }
コード例 #2
0
ファイル: LowLevelViewInteractor.cs プロジェクト: heruix/reko
        public object CreateControl()
        {
            var uiService = services.RequireService <IDecompilerShellUiService>();

            this.control      = new LowLevelView();
            this.Control.Font = new Font("Lucida Console", 10F); //$TODO: use user preference
            this.Control.CurrentAddressChanged += LowLevelView_CurrentAddressChanged;

            this.Control.ImageMapView.SelectedAddressChanged += ImageMapView_SelectedAddressChanged;

            this.Control.MemoryView.SelectionChanged += MemoryView_SelectionChanged;
            uiService.SetContextMenu(this.Control.MemoryView, MenuIds.CtxMemoryControl);
            this.control.MemoryView.Services = this.services;

            this.Control.DisassemblyView.StyleClass             = UiStyles.Disassembler;
            this.Control.DisassemblyView.SelectedObjectChanged += DisassemblyView_SelectedObjectChanged;
            uiService.SetContextMenu(this.Control.DisassemblyView, MenuIds.CtxDisassembler);
            this.Control.DisassemblyView.Services  = this.services;
            this.Control.DisassemblyView.Navigate += DisassemblyControl_Navigate;

            this.Control.VisualizerControl.Services = services;
            PopulateVisualizers();
            this.Control.VisualizerList.SelectedIndexChanged += VisualizerList_SelectedIndexChanged;
            this.control.VisualizerList.SelectedIndex         = 0;

            this.Control.ToolBarGoButton.Click         += ToolBarGoButton_Click;
            this.Control.ToolBarAddressTextbox.KeyDown += ToolBarAddressTextbox_KeyDown;

            this.navInteractor = new NavigationInteractor <Address>();
            this.navInteractor.Attach(this.Control);

            typeMarker = new TypeMarker(control.MemoryView);

            return(control);
        }
コード例 #3
0
        object GetValue(object obj, TypeMarker type)
        {
            switch (type)
            {
            case TypeMarker.Null:
                return(null);

            case TypeMarker.SByte:
            case TypeMarker.Byte:
            case TypeMarker.Short:
            case TypeMarker.UShort:
            case TypeMarker.Bool:
            case TypeMarker.Char:
            case TypeMarker.Int:
            case TypeMarker.UInt:
            case TypeMarker.Long:
            case TypeMarker.ULong:
                return(obj);

            case TypeMarker.Float:
                return(GetFloatRef((float)obj));

            case TypeMarker.Double:
                return(GetDoubleRef((double)obj));

            case TypeMarker.Decimal:
                return(GetDecimalRef((decimal)obj));

            case TypeMarker.String:
                return(GetStringRef((string)obj));

            case TypeMarker.Date:
                return(GetDateRef((DateTime)obj));

            case TypeMarker.Array:
                return(ConvertArray((Array)obj));

            case TypeMarker.IList:
                return(ConvertList((IEnumerable)obj));

            case TypeMarker.IDictionary:
                return(ConvertDictionary(obj));

            case TypeMarker.Dynamic:
                throw new NotSupportedException("DynamicObjects are not supported");

            case TypeMarker.Object:
                return(ConvertObject(obj));

            default:
                throw new NotSupportedException("Type <" + type + "> is not supported");
            }
        }
コード例 #4
0
        private static void DeserializeAndAddProperty(
            TypeMarker typeMarker,
            byte[] serializedBytes,
            JObject jObject,
            string key)
        {
            SqlSerializerFactory sqlSerializerFactory = new SqlSerializerFactory();

            // UTF-8 encoding.
            SqlVarcharSerializer sqlVarcharSerializer = new SqlVarcharSerializer(size: -1, codePageCharacterEncoding: 65001);

            switch (typeMarker)
            {
            case TypeMarker.Boolean:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <bool>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Double:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <double>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Long:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <long>().Deserialize(serializedBytes));
                break;

            case TypeMarker.String:
                jObject.Add(key, sqlVarcharSerializer.Deserialize(serializedBytes));
                break;

            case TypeMarker.Array:
                jObject.Add(key, JsonConvert.DeserializeObject <JArray>(sqlVarcharSerializer.Deserialize(serializedBytes)));
                break;

            case TypeMarker.Object:
                jObject.Add(key, JsonConvert.DeserializeObject <JObject>(sqlVarcharSerializer.Deserialize(serializedBytes)));
                break;

            default:
                Debug.Fail(string.Format("Unexpected type marker {0}", typeMarker));
                break;
            }
        }
コード例 #5
0
        Array ReadArray()
        {
            TypeMarker elemt = (TypeMarker)reader.ReadByte();
            Type       t     = types[(int)ReadVInt()];
            Array      arr   = Array.CreateInstance(t, (int)ReadVInt());

            if (TypeMarkerUtil.IsFinal(elemt))
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    arr.SetValue(ReadValue(elemt), i);
                }
            }
            else
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    arr.SetValue(ReadValue(), i);
                }
            }
            return(arr);
        }
コード例 #6
0
        private static void DeserializeAndAddProperty(
            TypeMarker typeMarker,
            byte[] serializedBytes,
            JObject jObject,
            string key)
        {
            switch (typeMarker)
            {
            case TypeMarker.Boolean:
                jObject.Add(key, SqlSerializerFactory.GetDefaultSerializer <bool>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Double:
                jObject.Add(key, SqlSerializerFactory.GetDefaultSerializer <double>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Long:
                jObject.Add(key, SqlSerializerFactory.GetDefaultSerializer <long>().Deserialize(serializedBytes));
                break;

            case TypeMarker.String:
                jObject.Add(key, SqlVarCharSerializer.Deserialize(serializedBytes));
                break;

            case TypeMarker.Array:
                jObject.Add(key, JsonConvert.DeserializeObject <JArray>(SqlVarCharSerializer.Deserialize(serializedBytes), JsonSerializerSettings));
                break;

            case TypeMarker.Object:
                jObject.Add(key, JsonConvert.DeserializeObject <JObject>(SqlVarCharSerializer.Deserialize(serializedBytes), JsonSerializerSettings));
                break;

            default:
                Debug.Fail(string.Format("Unexpected type marker {0}", typeMarker));
                break;
            }
        }
コード例 #7
0
 public SearchResultView(ListView lv)
 {
     this.listView = lv;
     this.listView.Columns.Clear();
     this.typeMarker = new TypeMarker(listView);
 }
コード例 #8
0
        public Control CreateControl()
        {
            var uiService = services.RequireService<IDecompilerShellUiService>();
            var uiPrefsSvc = services.RequireService<IUiPreferencesService>();
            this.control = new LowLevelView();
            this.Control.Font = uiPrefsSvc.DisassemblerFont ?? new Font("Lucida Console", 10F); //$TODO: use user preference
            this.Control.CurrentAddressChanged += LowLevelView_CurrentAddressChanged;

            this.Control.ImageMapView.SelectedAddressChanged += ImageMapView_SelectedAddressChanged;

            this.Control.MemoryView.SelectionChanged += MemoryView_SelectionChanged;
            this.Control.MemoryView.ContextMenu = uiService.GetContextMenu(MenuIds.CtxMemoryControl);
            this.control.MemoryView.Services = this.services;

            this.Control.DisassemblyView.SelectedObjectChanged += DisassemblyView_SelectedObjectChanged;
            this.Control.DisassemblyView.ContextMenu = uiService.GetContextMenu(MenuIds.CtxDisassembler);
            this.Control.DisassemblyView.Navigate += DisassemblyControl_Navigate;

            this.Control.ToolBarGoButton.Click += ToolBarGoButton_Click;
            this.Control.ToolBarAddressTextbox.KeyDown += ToolBarAddressTextbox_KeyDown;

            this.navInteractor = new NavigationInteractor();
            this.navInteractor.Attach(this.Control);

            typeMarker = new TypeMarker(control.MemoryView);
            typeMarker.TextChanged += typeMarker_FormatType;
            typeMarker.TextAccepted += typeMarker_TextAccepted;

            return control;
        }
コード例 #9
0
        object ReadValue(TypeMarker t)
        {
            switch (t)
            {
            case TypeMarker.Null:
                return(null);

            case TypeMarker.SByte:
                return((sbyte)reader.ReadSByte());

            case TypeMarker.Byte:
                return(reader.ReadByte());

            case TypeMarker.Short:
                return((short)ReadVSInt());

            case TypeMarker.UShort:
                return((ushort)ReadVInt());

            case TypeMarker.Int:
                return((int)ReadVSInt());

            case TypeMarker.UInt:
                return((uint)ReadVInt());

            case TypeMarker.Long:
                return((long)ReadVSInt());

            case TypeMarker.ULong:
                return((ulong)ReadVInt());

            case TypeMarker.Float:
                return(floats[(int)ReadVInt()]);

            case TypeMarker.Double:
                return(doubles[(int)ReadVInt()]);

            case TypeMarker.Decimal:
                return(decimals[(int)ReadVInt()]);

            case TypeMarker.Bool:
                return(reader.ReadBoolean());

            case TypeMarker.Char:
                return((char)ReadVInt());

            case TypeMarker.String:
                return(strings[(int)ReadVInt()]);

            case TypeMarker.Date:
                return(dates[(int)ReadVInt()]);

            case TypeMarker.Array:
                return(ReadArray());

            case TypeMarker.IList:
                return(ReadList());

            case TypeMarker.IDictionary:
                return(ReadDictionary());

            case TypeMarker.Object:
                return(ReadObject());

            default:
                throw new NotSupportedException("Type <" + t + "> is not supported");
            }
        }
コード例 #10
0
 public SearchResultView(ListView lv)
 {
     this.listView = lv;
     this.listView.Columns.Clear();
     this.typeMarker = new TypeMarker(listView);
 }
コード例 #11
0
 public static bool IsFinal(TypeMarker type)
 {
     return(!(type == TypeMarker.Array || type == TypeMarker.IList || type == TypeMarker.IDictionary || type == TypeMarker.Dynamic || type == TypeMarker.Object));
 }