/// <inheritdoc /> public PEImageBuildResult CreateImage(ModuleDefinition module) { var context = new PEImageBuildContext(); PEImage image = null; try { image = new PEImage { MachineType = module.MachineType, PEKind = module.PEKind, Characteristics = module.FileCharacteristics, SubSystem = module.SubSystem, DllCharacteristics = module.DllCharacteristics, DotNetDirectory = DotNetDirectoryFactory.CreateDotNetDirectory(module, context.DiagnosticBag), Resources = module.NativeResourceDirectory, }; } catch (Exception ex) { context.DiagnosticBag.Exceptions.Add(ex); context.DiagnosticBag.MarkAsFatal(); } return(new PEImageBuildResult(image, context.DiagnosticBag)); }
/// <inheritdoc /> public PEImageBuildResult CreateImage(ModuleDefinition module) { var context = new PEImageBuildContext(); PEImage image = null; ITokenMapping tokenMapping = null; try { // Create basic PE image skeleton. image = new PEImage { MachineType = module.MachineType, PEKind = module.PEKind, Characteristics = module.FileCharacteristics, SubSystem = module.SubSystem, DllCharacteristics = module.DllCharacteristics, Resources = module.NativeResourceDirectory, TimeDateStamp = module.TimeDateStamp }; // Construct new .NET directory. var symbolProvider = new NativeSymbolsProvider(image.ImageBase); var result = DotNetDirectoryFactory.CreateDotNetDirectory( module, symbolProvider, context.DiagnosticBag); image.DotNetDirectory = result.Directory; tokenMapping = result.TokenMapping; // Copy any collected native symbols over to the image. foreach (var import in symbolProvider.GetImportedModules()) { image.Imports.Add(import); } // Copy any collected base relocations over to the image. foreach (var relocation in symbolProvider.GetBaseRelocations()) { image.Relocations.Add(relocation); } // Copy over debug data. for (int i = 0; i < module.DebugData.Count; i++) { image.DebugData.Add(module.DebugData[i]); } } catch (Exception ex) { context.DiagnosticBag.Exceptions.Add(ex); context.DiagnosticBag.MarkAsFatal(); } tokenMapping ??= new TokenMapping(); return(new PEImageBuildResult(image, context.DiagnosticBag, tokenMapping)); }