示例#1
0
 internal void WriteSymbolTokenMap()
 {
     for (int i = 0; i < resolvedTokens.Count; i++)
     {
         int newToken = resolvedTokens[i];
         // The symbol API doesn't support remapping arbitrary integers, the types have to be the same,
         // so we copy the type from the newToken, because our pseudo tokens don't have a type.
         // (see MethodToken.SymbolToken)
         int oldToken = (i + 1) | (newToken & ~0xFFFFFF);
         SymbolSupport.RemapToken(symbolWriter, oldToken, newToken);
     }
 }
示例#2
0
 internal ModuleBuilder(AssemblyBuilder asm, string moduleName, string fileName, bool emitSymbolInfo)
     : base(asm.universe)
 {
     this.asm        = asm;
     this.moduleName = moduleName;
     this.fileName   = fileName;
     if (emitSymbolInfo)
     {
         symbolWriter = SymbolSupport.CreateSymbolWriterFor(this);
     }
     // <Module> must be the first record in the TypeDef table
     moduleType = new TypeBuilder(this, "<Module>", null, 0);
     types.Add(moduleType);
 }
示例#3
0
 private void WriteDebugDirectory(MetadataWriter mw)
 {
     if (DebugDirectoryLength != 0)
     {
         IMAGE_DEBUG_DIRECTORY idd = new IMAGE_DEBUG_DIRECTORY();
         idd.Characteristics = 0;
         idd.TimeDateStamp   = peWriter.Headers.FileHeader.TimeDateStamp;
         byte[] buf = SymbolSupport.GetDebugInfo(moduleBuilder.symbolWriter, ref idd);
         idd.PointerToRawData = (DebugDirectoryRVA - BaseRVA) + DebugDirectoryLength + PointerToRawData;
         mw.Write(idd.Characteristics);
         mw.Write(idd.TimeDateStamp);
         mw.Write(idd.MajorVersion);
         mw.Write(idd.MinorVersion);
         mw.Write(idd.Type);
         mw.Write(idd.SizeOfData);
         mw.Write(idd.AddressOfRawData);
         mw.Write(idd.PointerToRawData);
         mw.Write(buf);
     }
 }