public void __ReadTypeName(out string ns, out string name) { if (lazyConstructor == null) { ModuleReader mod = module as ModuleReader; if (mod != null) { int methodToken = mod.CustomAttribute.records[index].Type; if ((methodToken >> 24) == MemberRefTable.Index) { int methodIndex = (methodToken & 0xFFFFFF) - 1; int typeToken = mod.MemberRef.records[methodIndex].Class; if ((typeToken >> 24) == TypeRefTable.Index) { int typeIndex = (typeToken & 0xFFFFFF) - 1; int typeNameSpace = mod.TypeRef.records[typeIndex].TypeNameSpace; ns = typeNameSpace == 0 ? null : mod.GetString(typeNameSpace); name = mod.GetString(mod.TypeRef.records[typeIndex].TypeName); return; } } } } ns = Constructor.DeclaringType.Namespace; name = Constructor.DeclaringType.Name; }
internal TypeDefImpl(ModuleReader module, int index) { this.module = module; this.index = index; this.typeName = module.GetString(module.TypeDef.records[index].TypeName); this.typeNamespace = module.GetString(module.TypeDef.records[index].TypeNamespace); MarkKnownType(typeNamespace, typeName); }
internal TypeDefImpl(ModuleReader module, int index) { this.module = module; this.index = index; // empty typeName is not allowed, but obfuscators... this.typeName = module.GetString(module.TypeDef.records[index].TypeName) ?? ""; this.typeNamespace = module.GetString(module.TypeDef.records[index].TypeNamespace); MarkKnownType(typeNamespace, typeName); }
private void PatchAssemblyRef(ref byte[] blobHeap) { AssemblyRefTable assemblyRefs = module.AssemblyRef; for (int i = 0; i < assemblyRefs.records.Length; i++) { if (module.GetString(assemblyRefs.records[i].Name) == "mscorlib") { Version ver = GetMscorlibVersion(); assemblyRefs.records[i].MajorVersion = (ushort)ver.Major; assemblyRefs.records[i].MinorVersion = (ushort)ver.Minor; assemblyRefs.records[i].BuildNumber = (ushort)ver.Build; assemblyRefs.records[i].RevisionNumber = (ushort)ver.Revision; break; } } int publicKeyTokenMicrosoft = AddBlob(ref blobHeap, new byte[] { 0xB0, 0x3F, 0x5F, 0x7F, 0x11, 0xD5, 0x0A, 0x3A }); int publicKeyTokenEcma = AddBlob(ref blobHeap, new byte[] { 0xB7, 0x7A, 0x5C, 0x56, 0x19, 0x34, 0xE0, 0x89 }); assemblyRefTokens[(int)ProjectionAssembly.System_Runtime] = AddAssemblyReference("System.Runtime", publicKeyTokenMicrosoft); assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_InteropServices_WindowsRuntime] = AddAssemblyReference("System.Runtime.InteropServices.WindowsRuntime", publicKeyTokenMicrosoft); assemblyRefTokens[(int)ProjectionAssembly.System_ObjectModel] = AddAssemblyReference("System.ObjectModel", publicKeyTokenMicrosoft); assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_WindowsRuntime] = AddAssemblyReference("System.Runtime.WindowsRuntime", publicKeyTokenEcma); assemblyRefTokens[(int)ProjectionAssembly.System_Runtime_WindowsRuntime_UI_Xaml] = AddAssemblyReference("System.Runtime.WindowsRuntime.UI.Xaml", publicKeyTokenEcma); }
private AssemblyName GetNameImpl(ref AssemblyTable.Record rec) { AssemblyName name = new AssemblyName(); name.Name = manifestModule.GetString(rec.Name); name.Version = new Version(rec.MajorVersion, rec.MinorVersion, rec.BuildNumber, rec.RevisionNumber); if (rec.PublicKey != 0) { name.SetPublicKey(manifestModule.GetBlobCopy(rec.PublicKey)); } else { name.SetPublicKey(Empty <byte> .Array); } if (rec.Culture != 0) { name.CultureName = manifestModule.GetString(rec.Culture); } else { name.CultureName = ""; } name.HashAlgorithm = (AssemblyHashAlgorithm)rec.HashAlgId; name.CodeBase = this.CodeBase; PortableExecutableKinds peKind; ImageFileMachine machine; manifestModule.GetPEKind(out peKind, out machine); switch (machine) { case ImageFileMachine.I386: // FXBUG we copy the .NET bug that Preferred32Bit implies x86 if ((peKind & (PortableExecutableKinds.Required32Bit | PortableExecutableKinds.Preferred32Bit)) != 0) { name.ProcessorArchitecture = ProcessorArchitecture.X86; } else if ((rec.Flags & 0x70) == 0x70) { // it's a reference assembly name.ProcessorArchitecture = ProcessorArchitecture.None; } else { name.ProcessorArchitecture = ProcessorArchitecture.MSIL; } break; case ImageFileMachine.IA64: name.ProcessorArchitecture = ProcessorArchitecture.IA64; break; case ImageFileMachine.AMD64: name.ProcessorArchitecture = ProcessorArchitecture.Amd64; break; case ImageFileMachine.ARM: name.ProcessorArchitecture = ProcessorArchitecture.Arm; break; } name.RawFlags = (AssemblyNameFlags)rec.Flags; return(name); }