IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IKVM.Reflection.Reader.ModuleReader Class Referencesealed

Public Member Functions

override string ResolveString (int metadataToken)
 
override MemberInfo ResolveMember (int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 
override FieldInfo ResolveField (int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 
override MethodBase ResolveMethod (int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 
override Type[] __ResolveOptionalParameterTypes (int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments, out CustomModifiers[] customModifiers)
 
override CustomModifiers __ResolveTypeSpecCustomModifiers (int typeSpecToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 
override byte[] ResolveSignature (int metadataToken)
 
override __StandAloneMethodSig __ResolveStandAloneMethodSig (int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
 
override AssemblyName[] __GetReferencedAssemblies ()
 
override void __ResolveReferencedAssemblies (Assembly[] assemblies)
 
override string[] __GetReferencedModules ()
 
override Type[] __GetReferencedTypes ()
 
override Type[] __GetExportedTypes ()
 
override void __GetDataDirectoryEntry (int index, out int rva, out int length)
 
override long __RelativeVirtualAddressToFileOffset (int rva)
 
override bool __GetSectionInfo (int rva, out string name, out int characteristics, out int virtualAddress, out int virtualSize, out int pointerToRawData, out int sizeOfRawData)
 
override int __ReadDataFromRVA (int rva, byte[] data, int offset, int length)
 
override void GetPEKind (out PortableExecutableKinds peKind, out ImageFileMachine machine)
 
override IList< CustomAttributeData > __GetPlaceholderAssemblyCustomAttributes (bool multiple, bool security)
 
override System.Security.Cryptography.X509Certificates.X509Certificate GetSignerCertificate ()
 

Protected Member Functions

override ulong GetImageBaseImpl ()
 
override ulong GetStackReserveImpl ()
 
override uint GetFileAlignmentImpl ()
 
override DllCharacteristics GetDllCharacteristicsImpl ()
 

Properties

override Guid ModuleVersionId [get]
 
override string FullyQualifiedName [get]
 
override string Name [get]
 
override Assembly Assembly [get]
 
override string ScopeName [get]
 
override string __ImageRuntimeVersion [get]
 
override int MDStreamVersion [get]
 
override int __Subsystem [get]
 
override int __EntryPointRVA [get]
 
override int __EntryPointToken [get]
 

Detailed Description

Definition at line 36 of file ModuleReader.cs.

Member Function Documentation

◆ __GetDataDirectoryEntry()

override void IKVM.Reflection.Reader.ModuleReader.__GetDataDirectoryEntry ( int index,
out int rva,
out int length )

Definition at line 1105 of file ModuleReader.cs.

1106 {
1107 peFile.GetDataDirectoryEntry(index, out rva, out length);
1108 }

◆ __GetExportedTypes()

override Type[] IKVM.Reflection.Reader.ModuleReader.__GetExportedTypes ( )

Definition at line 1060 of file ModuleReader.cs.

1061 {
1062 var arr = new Type[ExportedTypeTable.RowCount];
1063 for (int i = 0; i < arr.Length; i++)
1064 arr[i] = ResolveExportedType(i);
1065
1066 return arr;
1067 }
IKVM.Reflection.Type Type

◆ __GetPlaceholderAssemblyCustomAttributes()

override IList< CustomAttributeData > IKVM.Reflection.Reader.ModuleReader.__GetPlaceholderAssemblyCustomAttributes ( bool multiple,
bool security )

Definition at line 1170 of file ModuleReader.cs.

1171 {
1172 TypeName typeName;
1173 switch ((multiple ? 1 : 0) + (security ? 2 : 0))
1174 {
1175 case 0:
1176 typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHere");
1177 break;
1178 case 1:
1179 typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereM");
1180 break;
1181 case 2:
1182 typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereS");
1183 break;
1184 case 3:
1185 default:
1186 typeName = new TypeName("System.Runtime.CompilerServices", "AssemblyAttributesGoHereSM");
1187 break;
1188 }
1189
1190 var list = new List<CustomAttributeData>();
1191 for (int i = 0; i < CustomAttributeTable.records.Length; i++)
1192 {
1193 if ((CustomAttributeTable.records[i].Parent >> 24) == TypeRefTable.Index)
1194 {
1195 var index = (CustomAttributeTable.records[i].Parent & 0xFFFFFF) - 1;
1196 if (typeName == GetTypeName(TypeRefTable.records[index].TypeNamespace, TypeRefTable.records[index].TypeName))
1197 list.Add(new CustomAttributeData(this, i));
1198 }
1199 }
1200
1201 return list;
1202 }

◆ __GetReferencedAssemblies()

override AssemblyName[] IKVM.Reflection.Reader.ModuleReader.__GetReferencedAssemblies ( )

Definition at line 991 of file ModuleReader.cs.

992 {
993 var list = new List<AssemblyName>();
994 for (int i = 0; i < AssemblyRefTable.records.Length; i++)
995 {
996 var name = new AssemblyName();
997 name.Name = GetString(AssemblyRefTable.records[i].Name);
998 name.Version = new Version(
999 AssemblyRefTable.records[i].MajorVersion,
1000 AssemblyRefTable.records[i].MinorVersion,
1001 AssemblyRefTable.records[i].BuildNumber,
1002 AssemblyRefTable.records[i].RevisionNumber);
1003
1004 if (AssemblyRefTable.records[i].PublicKeyOrToken.IsNil == false)
1005 {
1006 byte[] keyOrToken = GetBlobCopy(AssemblyRefTable.records[i].PublicKeyOrToken);
1007 const int PublicKey = 0x0001;
1008 if ((AssemblyRefTable.records[i].Flags & PublicKey) != 0)
1009 name.SetPublicKey(keyOrToken);
1010 else
1011 name.SetPublicKeyToken(keyOrToken);
1012 }
1013 else
1014 {
1015 name.SetPublicKeyToken(Array.Empty<byte>());
1016 }
1017
1018 if (AssemblyRefTable.records[i].Culture.IsNil == false)
1019 name.CultureName = GetString(AssemblyRefTable.records[i].Culture);
1020 else
1021 name.CultureName = "";
1022
1023 if (AssemblyRefTable.records[i].HashValue.IsNil == false)
1024 name.hash = GetBlobCopy(AssemblyRefTable.records[i].HashValue);
1025
1026 name.RawFlags = (AssemblyNameFlags)AssemblyRefTable.records[i].Flags;
1027 list.Add(name);
1028 }
1029
1030 return list.ToArray();
1031 }
IKVM.Reflection.AssemblyName AssemblyName

◆ __GetReferencedModules()

override string[] IKVM.Reflection.Reader.ModuleReader.__GetReferencedModules ( )

Definition at line 1042 of file ModuleReader.cs.

1043 {
1044 var arr = new string[this.ModuleRefTable.RowCount];
1045 for (int i = 0; i < arr.Length; i++)
1046 arr[i] = GetString(ModuleRefTable.records[i]);
1047
1048 return arr;
1049 }

◆ __GetReferencedTypes()

override Type[] IKVM.Reflection.Reader.ModuleReader.__GetReferencedTypes ( )

Definition at line 1051 of file ModuleReader.cs.

1052 {
1053 var arr = new Type[TypeRefTable.RowCount];
1054 for (int i = 0; i < arr.Length; i++)
1055 arr[i] = ResolveType((TypeRefTable.Index << 24) + i + 1);
1056
1057 return arr;
1058 }

◆ __GetSectionInfo()

override bool IKVM.Reflection.Reader.ModuleReader.__GetSectionInfo ( int rva,
out string name,
out int characteristics,
out int virtualAddress,
out int virtualSize,
out int pointerToRawData,
out int sizeOfRawData )

Definition at line 1115 of file ModuleReader.cs.

1116 {
1117 return peFile.GetSectionInfo(rva, out name, out characteristics, out virtualAddress, out virtualSize, out pointerToRawData, out sizeOfRawData);
1118 }

◆ __ReadDataFromRVA()

override int IKVM.Reflection.Reader.ModuleReader.__ReadDataFromRVA ( int rva,
byte[] data,
int offset,
int length )

Definition at line 1120 of file ModuleReader.cs.

1121 {
1122 SeekRVA(rva);
1123
1124 var totalBytesRead = 0;
1125 while (length > 0)
1126 {
1127 var read = stream.Read(data, offset, length);
1128 if (read == 0)
1129 break; // C++ assemblies can have fields that have an RVA that lies outside of the file
1130
1131 offset += read;
1132 length -= read;
1133 totalBytesRead += read;
1134 }
1135
1136 return totalBytesRead;
1137 }

◆ __RelativeVirtualAddressToFileOffset()

override long IKVM.Reflection.Reader.ModuleReader.__RelativeVirtualAddressToFileOffset ( int rva)

Definition at line 1110 of file ModuleReader.cs.

1111 {
1112 return peFile.RvaToFileOffset((uint)rva);
1113 }

◆ __ResolveOptionalParameterTypes()

override Type[] IKVM.Reflection.Reader.ModuleReader.__ResolveOptionalParameterTypes ( int metadataToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments,
out CustomModifiers[] customModifiers )

Definition at line 722 of file ModuleReader.cs.

723 {
724 int index = (metadataToken & 0xFFFFFF) - 1;
725 if (index < 0)
726 {
727 throw TokenOutOfRangeException(metadataToken);
728 }
729 else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRefTable.RowCount)
730 {
731 var sig = MemberRefTable.records[index].Signature;
732 return Signature.ReadOptionalParameterTypes(this, GetBlobReader(sig), new GenericContext(genericTypeArguments, genericMethodArguments), out customModifiers);
733 }
734 else if ((metadataToken >> 24) == MethodDefTable.Index && index < MethodDefTable.RowCount)
735 {
736 // for convenience, we support passing a MethodDef token as well, because in some places
737 // it makes sense to have a vararg method that is referred to by its methoddef (e.g. ldftn).
738 // Note that MethodSpec doesn't make sense, because generic methods cannot be vararg.
739 customModifiers = Array.Empty<CustomModifiers>();
740 return Type.EmptyTypes;
741 }
742 else
743 {
744 throw TokenOutOfRangeException(metadataToken);
745 }
746 }

◆ __ResolveReferencedAssemblies()

override void IKVM.Reflection.Reader.ModuleReader.__ResolveReferencedAssemblies ( Assembly[] assemblies)

Definition at line 1033 of file ModuleReader.cs.

1034 {
1035 assemblyRefs ??= new Assembly[AssemblyRefTable.RowCount];
1036
1037 for (int i = 0; i < assemblies.Length; i++)
1038 if (assemblyRefs[i] == null)
1039 assemblyRefs[i] = assemblies[i];
1040 }
IKVM.Reflection.Assembly Assembly

◆ __ResolveStandAloneMethodSig()

override __StandAloneMethodSig IKVM.Reflection.Reader.ModuleReader.__ResolveStandAloneMethodSig ( int metadataToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments )

Definition at line 899 of file ModuleReader.cs.

900 {
901 int index = (metadataToken & 0xFFFFFF) - 1;
902 if ((metadataToken >> 24) == StandAloneSigTable.Index && index >= 0 && index < StandAloneSigTable.RowCount)
903 return MethodSignature.ReadStandAloneMethodSig(this, GetStandAloneSig(index), new GenericContext(genericTypeArguments, genericMethodArguments));
904 else
905 throw TokenOutOfRangeException(metadataToken);
906 }

◆ __ResolveTypeSpecCustomModifiers()

override CustomModifiers IKVM.Reflection.Reader.ModuleReader.__ResolveTypeSpecCustomModifiers ( int typeSpecToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments )

Definition at line 748 of file ModuleReader.cs.

749 {
750 int index = (typeSpecToken & 0xFFFFFF) - 1;
751 if (typeSpecToken >> 24 != TypeSpecTable.Index || index < 0 || index >= TypeSpecTable.RowCount)
752 throw TokenOutOfRangeException(typeSpecToken);
753
754 return CustomModifiers.Read(this, ByteReader.FromBlob(blobHeap, TypeSpecTable.records[index]), new GenericContext(genericTypeArguments, genericMethodArguments));
755 }

◆ GetDllCharacteristicsImpl()

override DllCharacteristics IKVM.Reflection.Reader.ModuleReader.GetDllCharacteristicsImpl ( )
protected

Definition at line 1230 of file ModuleReader.cs.

1231 {
1232 return (DllCharacteristics)peFile.OptionalHeader.DllCharacteristics;
1233 }

◆ GetFileAlignmentImpl()

override uint IKVM.Reflection.Reader.ModuleReader.GetFileAlignmentImpl ( )
protected

Definition at line 1225 of file ModuleReader.cs.

1226 {
1227 return peFile.OptionalHeader.FileAlignment;
1228 }

◆ GetImageBaseImpl()

override ulong IKVM.Reflection.Reader.ModuleReader.GetImageBaseImpl ( )
protected

Definition at line 1215 of file ModuleReader.cs.

1216 {
1217 return peFile.OptionalHeader.ImageBase;
1218 }

◆ GetPEKind()

override void IKVM.Reflection.Reader.ModuleReader.GetPEKind ( out PortableExecutableKinds peKind,
out ImageFileMachine machine )

Definition at line 1139 of file ModuleReader.cs.

1140 {
1141 peKind = 0;
1142 if ((cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_ILONLY) != 0)
1143 peKind |= PortableExecutableKinds.ILOnly;
1144
1145 switch (cliHeader.Flags & (CliHeader.COMIMAGE_FLAGS_32BITREQUIRED | CliHeader.COMIMAGE_FLAGS_32BITPREFERRED))
1146 {
1147 case CliHeader.COMIMAGE_FLAGS_32BITREQUIRED:
1148 peKind |= PortableExecutableKinds.Required32Bit;
1149 break;
1150 case CliHeader.COMIMAGE_FLAGS_32BITREQUIRED | CliHeader.COMIMAGE_FLAGS_32BITPREFERRED:
1151 peKind |= PortableExecutableKinds.Preferred32Bit;
1152 break;
1153 default:
1154 // COMIMAGE_FLAGS_32BITPREFERRED by itself is illegal, so we ignore it
1155 // (not setting any flag is ok)
1156 break;
1157 }
1158
1159 if (peFile.OptionalHeader.Magic == IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC)
1160 peKind |= PortableExecutableKinds.PE32Plus;
1161
1162 machine = (ImageFileMachine)peFile.FileHeader.Machine;
1163 }

◆ GetSignerCertificate()

override System.Security.Cryptography.X509Certificates.X509Certificate IKVM.Reflection.Reader.ModuleReader.GetSignerCertificate ( )

Definition at line 1245 of file ModuleReader.cs.

1246 {
1247 return Authenticode.GetSignerCertificate(GetStream());
1248 }

◆ GetStackReserveImpl()

override ulong IKVM.Reflection.Reader.ModuleReader.GetStackReserveImpl ( )
protected

Definition at line 1220 of file ModuleReader.cs.

1221 {
1222 return peFile.OptionalHeader.SizeOfStackReserve;
1223 }

◆ ResolveField()

override FieldInfo IKVM.Reflection.Reader.ModuleReader.ResolveField ( int metadataToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments )

Definition at line 637 of file ModuleReader.cs.

638 {
639 int index = (metadataToken & 0xFFFFFF) - 1;
640 if (index < 0)
641 {
642 throw TokenOutOfRangeException(metadataToken);
643 }
644 else if ((metadataToken >> 24) == FieldTable.Index && index < FieldTable.RowCount)
645 {
646 return GetFieldAt(null, index);
647 }
648 else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRefTable.RowCount)
649 {
650 var field = GetMemberRef(index, genericTypeArguments, genericMethodArguments) as FieldInfo;
651 if (field != null)
652 return field;
653
654 throw new ArgumentException(String.Format("Token 0x{0:x8} is not a valid FieldInfo token in the scope of module {1}.", metadataToken, this.Name), "metadataToken");
655 }
656 else
657 {
658 throw TokenOutOfRangeException(metadataToken);
659 }
660 }
IKVM.Reflection.FieldInfo FieldInfo

◆ ResolveMember()

override MemberInfo IKVM.Reflection.Reader.ModuleReader.ResolveMember ( int metadataToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments )

Definition at line 606 of file ModuleReader.cs.

607 {
608 switch (metadataToken >> 24)
609 {
610 case FieldTable.Index:
611 return ResolveField(metadataToken, genericTypeArguments, genericMethodArguments);
612 case MemberRefTable.Index:
613 int index = (metadataToken & 0xFFFFFF) - 1;
614 if (index < 0 || index >= MemberRefTable.RowCount)
615 goto default;
616
617 return GetMemberRef(index, genericTypeArguments, genericMethodArguments);
618 case MethodDefTable.Index:
619 case MethodSpecTable.Index:
620 return ResolveMethod(metadataToken, genericTypeArguments, genericMethodArguments);
621 case TypeRefTable.Index:
622 case TypeDefTable.Index:
623 case TypeSpecTable.Index:
624 return ResolveType(metadataToken, genericTypeArguments, genericMethodArguments);
625 default:
626 throw TokenOutOfRangeException(metadataToken);
627 }
628 }
override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)

◆ ResolveMethod()

override MethodBase IKVM.Reflection.Reader.ModuleReader.ResolveMethod ( int metadataToken,
Type[] genericTypeArguments,
Type[] genericMethodArguments )

Definition at line 691 of file ModuleReader.cs.

692 {
693 int index = (metadataToken & 0xFFFFFF) - 1;
694 if (index < 0)
695 {
696 throw TokenOutOfRangeException(metadataToken);
697 }
698 else if ((metadataToken >> 24) == MethodDefTable.Index && index < MethodDefTable.RowCount)
699 {
700 return GetMethodAt(null, index);
701 }
702 else if ((metadataToken >> 24) == MemberRefTable.Index && index < MemberRefTable.RowCount)
703 {
704 var method = GetMemberRef(index, genericTypeArguments, genericMethodArguments) as MethodBase;
705 if (method != null)
706 return method;
707
708 throw new ArgumentException(String.Format("Token 0x{0:x8} is not a valid MethodBase token in the scope of module {1}.", metadataToken, this.Name), "metadataToken");
709 }
710 else if ((metadataToken >> 24) == MethodSpecTable.Index && index < MethodSpecTable.RowCount)
711 {
712 var method = (MethodInfo)ResolveMethod(MethodSpecTable.records[index].Method, genericTypeArguments, genericMethodArguments);
713 var instantiation = ByteReader.FromBlob(blobHeap, MethodSpecTable.records[index].Instantiation);
714 return method.MakeGenericMethod(Signature.ReadMethodSpec(this, instantiation, new GenericContext(genericTypeArguments, genericMethodArguments)));
715 }
716 else
717 {
718 throw TokenOutOfRangeException(metadataToken);
719 }
720 }
IKVM.Reflection.MethodInfo MethodInfo
IKVM.Reflection.MethodBase MethodBase

◆ ResolveSignature()

override byte[] IKVM.Reflection.Reader.ModuleReader.ResolveSignature ( int metadataToken)

Definition at line 885 of file ModuleReader.cs.

886 {
887 int index = (metadataToken & 0xFFFFFF) - 1;
888 if ((metadataToken >> 24) == StandAloneSigTable.Index && index >= 0 && index < StandAloneSigTable.RowCount)
889 {
890 var br = GetStandAloneSig(index);
891 return br.ReadBytes(br.Length);
892 }
893 else
894 {
895 throw TokenOutOfRangeException(metadataToken);
896 }
897 }

◆ ResolveString()

override string IKVM.Reflection.Reader.ModuleReader.ResolveString ( int metadataToken)

Definition at line 341 of file ModuleReader.cs.

342 {
343 if ((metadataToken >> 24) != 0x70)
344 throw TokenOutOfRangeException(metadataToken);
345
346 var h = MetadataTokens.StringHandle(metadataToken);
347
348 if (strings.TryGetValue(h, out var str) == false)
349 {
350 lazyUserStringHeap ??= ReadHeap(GetStream(), userStringHeapOffset, userStringHeapSize);
351
352 var index = metadataToken & 0xFFFFFF;
353 var len = ReadCompressedUInt(lazyUserStringHeap, ref index) & ~1;
354 var sb = new StringBuilder(len / 2);
355 for (int i = 0; i < len; i += 2)
356 {
357 var ch = (char)(lazyUserStringHeap[index + i] | lazyUserStringHeap[index + i + 1] << 8);
358 sb.Append(ch);
359 }
360
361 str = sb.ToString();
362 strings.Add(h, str);
363 }
364
365 return str;
366 }

Property Documentation

◆ __EntryPointRVA

override int IKVM.Reflection.Reader.ModuleReader.__EntryPointRVA
get

Definition at line 1235 of file ModuleReader.cs.

1236 {
1237 get { return (cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) != 0 ? (int)cliHeader.EntryPointToken : 0; }
1238 }

◆ __EntryPointToken

override int IKVM.Reflection.Reader.ModuleReader.__EntryPointToken
get

Definition at line 1240 of file ModuleReader.cs.

1241 {
1242 get { return (cliHeader.Flags & CliHeader.COMIMAGE_FLAGS_NATIVE_ENTRYPOINT) == 0 ? (int)cliHeader.EntryPointToken : 0; }
1243 }

◆ __ImageRuntimeVersion

override string IKVM.Reflection.Reader.ModuleReader.__ImageRuntimeVersion
get

Definition at line 1095 of file ModuleReader.cs.

1096 {
1097 get { return imageRuntimeVersion; }
1098 }

◆ __Subsystem

override int IKVM.Reflection.Reader.ModuleReader.__Subsystem
get

Definition at line 1165 of file ModuleReader.cs.

1166 {
1167 get { return peFile.OptionalHeader.Subsystem; }
1168 }

◆ Assembly

override Assembly IKVM.Reflection.Reader.ModuleReader.Assembly
get

Definition at line 573 of file ModuleReader.cs.

◆ FullyQualifiedName

override string IKVM.Reflection.Reader.ModuleReader.FullyQualifiedName
get

Definition at line 569 of file ModuleReader.cs.

◆ MDStreamVersion

override int IKVM.Reflection.Reader.ModuleReader.MDStreamVersion
get

Definition at line 1100 of file ModuleReader.cs.

1101 {
1102 get { return metadataStreamVersion; }
1103 }

◆ ModuleVersionId

override Guid IKVM.Reflection.Reader.ModuleReader.ModuleVersionId
get

Definition at line 542 of file ModuleReader.cs.

◆ Name

override string IKVM.Reflection.Reader.ModuleReader.Name
get

Definition at line 571 of file ModuleReader.cs.

◆ ScopeName

override string IKVM.Reflection.Reader.ModuleReader.ScopeName
get

Definition at line 757 of file ModuleReader.cs.

758 {
759 get { return GetString(ModuleTable.records[0].Name); }
760 }

The documentation for this class was generated from the following file: