/// <summary> /// Converts CLR type to Engine interface. /// </summary> /// <param name="clrType">The CLR type.</param> internal ClrMdType FromClrType(Microsoft.Diagnostics.Runtime.ClrType clrType) { if (clrType != null) { return(clrTypes[clrType]); } return(null); }
private void InitializeOffsets() { if (OffsetsInitialized) { return; } foreach (var t in Assembly.GetExecutingAssembly().DefinedTypes) { if (!t.Namespace.StartsWith("QTRHacker.Functions.GameObjects")) { continue; } var typeNameAttr = t.GetCustomAttributes(typeof(GameFieldOffsetTypeNameAttribute), false); foreach (var f in t.GetFields(BindingFlags.Static | BindingFlags.Public)) { if (!f.IsStatic || !(f.FieldType == typeof(int) || f.FieldType == typeof(uint) || f.FieldType == typeof(long) || f.FieldType == typeof(ulong))) { continue; } var fieldNameAttr = f.GetCustomAttributes(typeof(GameFieldOffsetFieldNameAttribute), false); if (fieldNameAttr.Length == 0) { continue; } GameFieldOffsetFieldNameAttribute gfofna = fieldNameAttr[0] as GameFieldOffsetFieldNameAttribute; if (gfofna.TypeName == null && typeNameAttr.Length == 0) //信息不足 { continue; } Microsoft.Diagnostics.Runtime.ClrType clrType = null; if (gfofna.TypeName != null) { clrType = HContext.MainAddressHelper.Module.GetTypeByName(gfofna.TypeName); } else { clrType = HContext.MainAddressHelper.Module.GetTypeByName((typeNameAttr[0] as GameFieldOffsetTypeNameAttribute).TypeName); } var field = clrType.GetFieldByName(gfofna.FieldName); if (field == null) { GameContextExceptionHandler(new FieldNotFoundException("Field named " + gfofna.FieldName + " not found.(" + f.DeclaringType.FullName + "." + f.Name + ")")); } else { f.SetValue(null, field.Offset + 4); //需要+4,原因是Offset比真实的"偏移"要少了一个指针的位置 } } } }
/// <summary> /// Initializes a new instance of the <see cref="ClrMdType"/> class. /// </summary> /// <param name="provider">The CLR provider.</param> /// <param name="clrType">The CLR type.</param> public ClrMdType(CLR.ClrMdProvider provider, Microsoft.Diagnostics.Runtime.ClrType clrType) { Provider = provider; ClrType = clrType; }
/// <summary> /// Creates CodeType from the CLR type. /// </summary> /// <param name="clrType">The CLR type.</param> internal CodeType FromClrType(Microsoft.Diagnostics.Runtime.ClrType clrType) { return(ClrModuleCache[clrType.Module].ClrTypes[clrType]); }
/// <summary> /// Creates CodeType from the CLR type. /// </summary> /// <param name="clrType">The CLR type.</param> private CodeType GetClrCodeType(Microsoft.Diagnostics.Runtime.ClrType clrType) { return(new ClrCodeType(this, clrType)); }
/// <summary> /// Creates CodeType from the CLR type. /// </summary> /// <param name="clrType">The CLR type.</param> internal CodeType FromClrType(Microsoft.Diagnostics.Runtime.ClrType clrType) { return(Process.FromClrType(clrType)); }
/// <summary> /// Creates CodeType from the CLR type. /// </summary> /// <param name="clrType">The CLR type.</param> internal CodeType FromClrType(Microsoft.Diagnostics.Runtime.ClrType clrType) { return(ModulesById[clrType.Module.ImageBase].TypesByName[clrType.Name]); }