コード例 #1
0
 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;
 }
コード例 #2
0
 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);
 }
コード例 #3
0
 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);
 }
コード例 #4
0
ファイル: Projection.cs プロジェクト: parhelia512/ikvm-1
        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);
        }
コード例 #5
0
        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);
        }