public MethodRewriteContext(TypeRewriteContext declaringType, MethodDefinition originalMethod)
        {
            DeclaringType  = declaringType;
            OriginalMethod = originalMethod;

            var newMethod = new MethodDefinition("", AdjustAttributes(originalMethod.Attributes), declaringType.AssemblyContext.Imports.Void);

            NewMethod = newMethod;

            if (originalMethod.HasGenericParameters)
            {
                var genericParams = originalMethod.GenericParameters;

                foreach (var oldParameter in genericParams)
                {
                    var genericParameter = new GenericParameter(oldParameter.Name, newMethod);
                    genericParameter.Attributes = oldParameter.Attributes.StripValueTypeConstraint();
                    newMethod.GenericParameters.Add(genericParameter);
                }
            }

            if (!Pass15GenerateMemberContexts.HasObfuscatedMethods && originalMethod.Name.IsObfuscated())
            {
                Pass15GenerateMemberContexts.HasObfuscatedMethods = true;
            }

            FileOffset = originalMethod.ExtractOffset();
            Rva        = originalMethod.ExtractRva();
        }
Пример #2
0
 public void RegisterTypeRewrite(TypeRewriteContext context)
 {
     if (context.OriginalType != null)
     {
         myOldTypeMap[context.OriginalType] = context;
     }
     myNewTypeMap[context.NewType] = context;
     myNameTypeMap[(context.OriginalType ?? context.NewType).FullName] = context;
 }
Пример #3
0
        public FieldRewriteContext(TypeRewriteContext declaringType, FieldDefinition originalField, Dictionary <string, int>?renamedFieldCounts = null)
        {
            DeclaringType = declaringType;
            OriginalField = originalField;

            UnmangledName = UnmangleFieldName(originalField, declaringType.AssemblyContext.GlobalContext.Options, renamedFieldCounts);
            var pointerField = new FieldDefinition("NativeFieldInfoPtr_" + UnmangledName, FieldAttributes.Private | FieldAttributes.Static | FieldAttributes.InitOnly, declaringType.AssemblyContext.Imports.IntPtr);

            declaringType.NewType.Fields.Add(pointerField);

            PointerField = new FieldReference(pointerField.Name, pointerField.FieldType, DeclaringType.SelfSubstitutedRef);
        }
        public FieldRewriteContext(TypeRewriteContext declaringType, FieldDefinition originalField)
        {
            DeclaringType = declaringType;
            OriginalField = originalField;

            UnmangledName = UnmangleFieldName(originalField);
            var pointerField = new FieldDefinition("NativeFieldInfoPtr_" + UnmangledName, FieldAttributes.Private | FieldAttributes.Static | FieldAttributes.InitOnly, declaringType.AssemblyContext.Imports.IntPtr);
            var offsetField  = new FieldDefinition("NativeFieldOffset_" + UnmangledName, FieldAttributes.Private | FieldAttributes.Static | FieldAttributes.InitOnly, declaringType.AssemblyContext.Imports.IntPtr);

            declaringType.NewType.Fields.Add(pointerField);
            declaringType.NewType.Fields.Add(offsetField);

            PointerField = new FieldReference(pointerField.Name, pointerField.FieldType, DeclaringType.SelfSubstitutedRef);
            OffsetField  = new FieldReference(offsetField.Name, offsetField.FieldType, DeclaringType.SelfSubstitutedRef);
        }
        public MethodRewriteContext(TypeRewriteContext declaringType, MethodDefinition originalMethod)
        {
            DeclaringType  = declaringType;
            OriginalMethod = originalMethod;

            var passthroughNames = declaringType.AssemblyContext.GlobalContext.Options.PassthroughNames;

            OriginalNameObfuscated = !passthroughNames &&
                                     (OriginalMethod?.Name?.IsObfuscated(declaringType.AssemblyContext.GlobalContext
                                                                         .Options) ?? false);

            var newMethod = new MethodDefinition("", AdjustAttributes(originalMethod.Attributes, originalMethod.Name == "Finalize"), declaringType.AssemblyContext.Imports.Void);

            NewMethod = newMethod;

            HasExtensionAttribute = originalMethod.CustomAttributes.Any(x => x.AttributeType.FullName == typeof(ExtensionAttribute).FullName);

            if (HasExtensionAttribute)
            {
                newMethod.CustomAttributes.Add(new CustomAttribute(declaringType.AssemblyContext.Imports.ExtensionAttributeCtor));
            }

            if (originalMethod.HasGenericParameters)
            {
                var genericParams = originalMethod.GenericParameters;

                foreach (var oldParameter in genericParams)
                {
                    var genericParameter = new GenericParameter(oldParameter.Name, newMethod);
                    genericParameter.Attributes = oldParameter.Attributes.StripValueTypeConstraint();
                    newMethod.GenericParameters.Add(genericParameter);
                }
            }

            if (!Pass15GenerateMemberContexts.HasObfuscatedMethods && !passthroughNames && originalMethod.Name.IsObfuscated(declaringType.AssemblyContext.GlobalContext.Options))
            {
                Pass15GenerateMemberContexts.HasObfuscatedMethods = true;
            }

            FileOffset = originalMethod.ExtractOffset();
            Rva        = originalMethod.ExtractRva();
            if (FileOffset != 0)
            {
                declaringType.AssemblyContext.GlobalContext.MethodStartAddresses.Add(FileOffset);
            }
        }
Пример #6
0
        public MethodRewriteContext(TypeRewriteContext declaringType, MethodDefinition originalMethod)
        {
            DeclaringType  = declaringType;
            OriginalMethod = originalMethod;

            var newMethod = new MethodDefinition("", AdjustAttributes(originalMethod.Attributes), declaringType.AssemblyContext.Imports.Void);

            NewMethod = newMethod;

            if (originalMethod.HasGenericParameters)
            {
                var genericParams = originalMethod.GenericParameters;

                foreach (var oldParameter in genericParams)
                {
                    var genericParameter = new GenericParameter(oldParameter.Name, newMethod);
                    newMethod.GenericParameters.Add(genericParameter);
                }
            }
        }
 public void RegisterTypeRewrite(TypeRewriteContext context)
 {
     myOldTypeMap[context.OriginalType]           = context;
     myNewTypeMap[context.NewType]                = context;
     myNameTypeMap[context.OriginalType.FullName] = context;
 }