PEAPI.MetaData.BuildMetaData C# (CSharp) Method

BuildMetaData() private method

private BuildMetaData ( uint codeStartOffset ) : void
codeStartOffset uint
return void
		internal void BuildMetaData(uint codeStartOffset) 
		{
			codeStart = codeStartOffset;
			BuildTable(metaDataTables[(int)MDTable.TypeDef]);
			BuildTable(metaDataTables[(int)MDTable.TypeSpec]);
			BuildTable(metaDataTables[(int)MDTable.MemberRef]);
#if NET_2_0
			BuildTable(metaDataTables[(int)MDTable.GenericParam]);
			BuildTable(metaDataTables[(int)MDTable.MethodSpec]);
			BuildTable(metaDataTables[(int)MDTable.GenericParamConstraint]);
#endif
			BuildTable(metaDataTables[(int)MDTable.ManifestResource]);

			if (cattr_list != null) {
				foreach (CustomAttribute cattr in cattr_list)
					cattr.BuildTables (this);
			}

			if (declsec_list != null) {
				foreach (BaseDeclSecurity decl_sec in declsec_list)
					decl_sec.BuildTables (this);
			}

			/*      for (int i=0; i < metaDataTables.Length; i++) {
				ArrayList table = metaDataTables[i];
				if (table != null) {
				for (int j=0; j < table.Count; j++) {
				((MetaDataElement)table[j]).BuildTables(this);
				}
				}
				}
			 */

			SetIndexSizes();
			for (int i=1; i < numStreams; i++) {
				streams[i].EndStream();
			}
			CalcTildeStreamSize();
			SetStreamOffsets();
			byteCodePadding = NumToAlign(codeSize,4);
			if (entryPoint != null) file.SetEntryPoint(entryPoint.Token());

			// Check ordering of specific tables
			// Constant, CustomAttribute, FieldMarshal, DeclSecurity, MethodSemantics
			// ImplMap, GenericParam
			// Need to load GenericParamConstraint AFTER GenericParam table in correct order
			// The tables:
			//   InterfaceImpl, ClassLayout, FieldLayout, MethodImpl, FieldRVA, NestedClass
			// will _ALWAYS_ be in the correct order as embedded in BuildMDTables

			SortTable(metaDataTables[(int)MDTable.Constant]);
			SortTable(metaDataTables[(int)MDTable.FieldMarshal]);
			SortTable(metaDataTables[(int)MDTable.DeclSecurity]);
			SortTable(metaDataTables[(int)MDTable.MethodSemantics]);
			SortTable(metaDataTables[(int)MDTable.ImplMap]);
#if NET_2_0
			if (metaDataTables[(int)MDTable.GenericParam] != null) {
				SortTable(metaDataTables[(int)MDTable.GenericParam]);
				// Now add GenericParamConstraints
				/*for (int i=0; i < metaDataTables[(int)MDTable.GenericParam].Count; i++) {
				  ((GenericParameter)metaDataTables[(int)MDTable.GenericParam][i]).AddConstraints(this);
				  }*/
			}
			SortTable(metaDataTables[(int)MDTable.GenericParamConstraint]);
#endif	
			SortTable(metaDataTables[(int)MDTable.InterfaceImpl]);
			SortTable(metaDataTables[(int)MDTable.CustomAttribute]);

		}