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); }
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))); } }
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; }
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; }
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); }
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); }
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)); }
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); }
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); }
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); }
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)); }
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()); }
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}'"); } }
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); }
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)); }
private string GetDefaultValue(_DEBUG_TYPED_DATA typedData) { _output.Catch(); _helper.OutputShortValue(typedData); return(_output.StopCatching().Trim()); }
private int GetEnumValue(_DEBUG_TYPED_DATA typedData) { return(_helper.ReadValue(typedData.Offset, 1)[0]); }
public VariableMetaData(string name, string typeName, _DEBUG_TYPED_DATA entry) { Name = name; TypeName = typeName; Entry = entry; }
protected string GetTypeName(_DEBUG_TYPED_DATA typedData) { return(_symbols.GetSymbolType(typedData.ModBase, typedData.TypeId)); }