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(); }
public void RegisterTypeRewrite(TypeRewriteContext context) { if (context.OriginalType != null) { myOldTypeMap[context.OriginalType] = context; } myNewTypeMap[context.NewType] = context; myNameTypeMap[(context.OriginalType ?? context.NewType).FullName] = context; }
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); } }
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; }