Пример #1
0
        public Variable AddVariable(int parentId, Func <int, Variable> factory, _DEBUG_TYPED_DATA entry)
        {
            var result = AddItem(factory, _variables, parentId);

            _variableDescriptions[result.Id] = new VariableMetaData(result.Name, result.Type, entry);

            return(result);
        }
Пример #2
0
        protected IEnumerable <VariableMetaData> ReadArray(_DEBUG_TYPED_DATA pointer, ulong size)
        {
            var dereferenced = _helper.Dereference(pointer);

            for (ulong i = 0; i < size; i++)
            {
                yield return(new VariableMetaData($"[{i}]", GetTypeName(dereferenced), _helper.GetArrayItem(pointer, i)));
            }
        }
Пример #3
0
        private byte[] ReadValue(_DEBUG_TYPED_DATA typedData)
        {
            var valueBuffer = new byte[typedData.Size];
            uint bytesRead;
            _spaces.ReadVirtual(typedData.Offset, valueBuffer, typedData.Size, out bytesRead);
            var valueTrimmed = new byte[bytesRead];
            Array.Copy(valueBuffer, valueTrimmed, bytesRead);

            return valueTrimmed;
        }
Пример #4
0
        public TypedVariable(_DEBUG_TYPED_DATA data, _DEBUG_TYPED_DATA dereferenced, IDictionary <string, TypedVariable> fields)
        {
            if (fields == null)
            {
                throw new ArgumentNullException(nameof(fields));
            }

            Fields       = new ReadOnlyDictionary <string, TypedVariable>(fields);
            Data         = data;
            Dereferenced = dereferenced;
        }
Пример #5
0
        public _DEBUG_TYPED_DATA Dereference(_DEBUG_TYPED_DATA typedData)
        {
            var result = default(_EXT_TYPED_DATA);

            result.Operation = _EXT_TDOP.EXT_TDOP_GET_DEREFERENCE;
            result.InData    = typedData;
            result.Status    = 0;

            var response = PerformRequest(result, Defaults.NoPayload);

            return(response.OutData);
        }
Пример #6
0
        public _DEBUG_TYPED_DATA GetArrayItem(_DEBUG_TYPED_DATA pointer, ulong index)
        {
            var result = default(_EXT_TYPED_DATA);

            result.Operation = _EXT_TDOP.EXT_TDOP_GET_ARRAY_ELEMENT;
            result.InData    = pointer;
            result.In64      = index;

            var response = PerformRequest(result, Defaults.NoPayload);

            return(response.OutData);
        }
Пример #7
0
        public _EXT_TYPED_DATA OutputShortValue(_DEBUG_TYPED_DATA typedData)
        {
            var result = default(_EXT_TYPED_DATA);

            result.Operation = _EXT_TDOP.EXT_TDOP_OUTPUT_SIMPLE_VALUE;
            result.InData    = typedData;

            // will be populated
            result.Status = 0;

            return(PerformRequest(result, Defaults.NoPayload));
        }
Пример #8
0
        public _DEBUG_TYPED_DATA OutputTypeDefinition(_DEBUG_TYPED_DATA typedData)
        {
            var result = default(_EXT_TYPED_DATA);

            result.Operation = _EXT_TDOP.EXT_TDOP_OUTPUT_TYPE_DEFINITION;
            result.InData    = typedData;
            result.Status    = 0;

            var response = PerformRequest(result, Defaults.NoPayload);

            return(response.OutData);
        }
Пример #9
0
        protected uint GetArrayLength(_DEBUG_TYPED_DATA typedData)
        {
            var itemSize  = _helper.Dereference(typedData).Size;
            var totalSize = typedData.Size;

            if (itemSize == 0)
            {
                return(0);
            }

            return(totalSize / itemSize);
        }
Пример #10
0
        public _DEBUG_TYPED_DATA GetField(_DEBUG_TYPED_DATA typedData, string field)
        {
            var result = default(_EXT_TYPED_DATA);

            result.Operation  = _EXT_TDOP.EXT_TDOP_GET_FIELD;
            result.InData     = typedData;
            result.InStrIndex = (uint)Marshal.SizeOf(result);
            result.Status     = 0;

            var response = PerformRequest(result, Encoding.Default.GetBytes(field));

            return(response.OutData);
        }
Пример #11
0
        private Tuple <string, string> ReadEnumNames(_DEBUG_TYPED_DATA typedData)
        {
            _output.Catch();
            _helper.OutputTypeDefinition(typedData);
            var name = _output.StopCatching();

            var nothingPart = name.Substring(0, name.IndexOf(':')).Trim();

            nothingPart = nothingPart.Substring(nothingPart.LastIndexOf('$') + 1);

            var pointerPart = name.Substring(name.IndexOf(':') + 1).Trim();

            pointerPart = pointerPart.Substring(pointerPart.IndexOf(':') + 2); // a::b::c

            return(new Tuple <string, string>(nothingPart, pointerPart));
        }
Пример #12
0
        public string[] ReadFieldNames(_DEBUG_TYPED_DATA data)
        {
            List <string> result = new List <string>();
            StringBuilder buffer = new StringBuilder(Defaults.BufferSize);
            uint          nameSize;
            uint          fieldIndex = 0;
            var           hr         = _symbols.GetFieldNameWide(data.ModBase, data.TypeId, fieldIndex, buffer, Defaults.BufferSize, out nameSize);

            while (hr == HResult.Ok)
            {
                result.Add(buffer.ToString());
                fieldIndex++;
                hr = _symbols.GetFieldNameWide(data.ModBase, data.TypeId, fieldIndex, buffer, Defaults.BufferSize, out nameSize);
            }

            return(result.ToArray());
        }
Пример #13
0
        public long ReadLong(_DEBUG_TYPED_DATA field)
        {
            switch (field.Size)
            {
            case 2:
                return(BitConverter.ToInt16(ReadValue(field.Offset, field.Size), 0));

            case 4:
                return(BitConverter.ToInt32(ReadValue(field.Offset, field.Size), 0));

            case 8:
                return(BitConverter.ToInt64(ReadValue(field.Offset, field.Size), 0));

            default:
                throw new ArgumentException($"Vector size field has unsupported length '{field.Size}'");
            }
        }
Пример #14
0
        private Dictionary <int, string> ReadEnumNames(_DEBUG_TYPED_DATA typedData)
        {
            _output.Catch();
            _helper.OutputTypeDefinition(typedData);
            var typeDefinition = _output.StopCatching();

            var enumerationTypes = typeDefinition.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            var result           = new Dictionary <int, string>();

            foreach (var line in enumerationTypes)
            {
                var enumName  = line.Substring(0, line.IndexOf('=')).Trim();
                var enumValue = line.Substring(line.IndexOf('=') + 1).Replace("0n", string.Empty).Trim();
                result.Add(int.Parse(enumValue), enumName);
            }

            return(result);
        }
Пример #15
0
        public TypedVariable ReadVariable(_DEBUG_TYPED_DATA data)
        {
            _DEBUG_TYPED_DATA dereferenced = default(_DEBUG_TYPED_DATA);
            bool isDereferenced            = false;

            if (data.Tag == (uint)SymTag.PointerType)
            {
                dereferenced   = Dereference(data);
                isDereferenced = true;
            }

            var dataToOperate = isDereferenced ? dereferenced : data;
            var fieldNames    = ReadFieldNames(dataToOperate);
            var fields        = fieldNames.Select(x => new KeyValuePair <string, TypedVariable>(x, ReadVariable(GetField(dataToOperate, x))));
            var fieldsMap     = new Dictionary <string, TypedVariable>();

            foreach (var pair in fields)
            {
                var key = GetKey(fieldsMap, pair.Key);
                fieldsMap.Add(key, pair.Value);
            }

            return(new TypedVariable(data, dereferenced, fieldsMap));
        }
Пример #16
0
 private string GetDefaultValue(_DEBUG_TYPED_DATA typedData)
 {
     _output.Catch();
     _helper.OutputShortValue(typedData);
     return(_output.StopCatching().Trim());
 }
Пример #17
0
 private int GetEnumValue(_DEBUG_TYPED_DATA typedData)
 {
     return(_helper.ReadValue(typedData.Offset, 1)[0]);
 }
Пример #18
0
 public VariableMetaData(string name, string typeName, _DEBUG_TYPED_DATA entry)
 {
     Name     = name;
     TypeName = typeName;
     Entry    = entry;
 }
Пример #19
0
 protected string GetTypeName(_DEBUG_TYPED_DATA typedData)
 {
     return(_symbols.GetSymbolType(typedData.ModBase, typedData.TypeId));
 }