Example #1
0
        /// <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);
        }
Example #2
0
 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比真实的"偏移"要少了一个指针的位置
             }
         }
     }
 }
Example #3
0
 /// <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;
 }
Example #4
0
 /// <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]);
 }
Example #5
0
 /// <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));
 }
Example #6
0
 /// <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));
 }
Example #7
0
 /// <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]);
 }