public void LoadUserData(UserData_v3 sUser, Program program, UserData user) { if (sUser == null) { return; } user.OnLoadedScript = sUser.OnLoadedScript; if (sUser.Processor != null) { program.User.Processor = sUser.Processor.Name; if (program.Architecture == null && !string.IsNullOrEmpty(program.User.Processor)) { program.Architecture = Services.RequireService <IConfigurationService>().GetArchitecture(program.User.Processor); } //program.Architecture.LoadUserOptions(); //$TODO } if (sUser.Procedures != null) { user.Procedures = sUser.Procedures .Select(sup => { Address addr; program.Architecture.TryParseAddress(sup.Address, out addr); return(new KeyValuePair <Address, Procedure_v1>(addr, sup)); }) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.PlatformOptions != null) { program.User.Environment = sUser.PlatformOptions.Name; program.Platform.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.PlatformOptions.Options)); } if (sUser.GlobalData != null) { user.Globals = sUser.GlobalData .Select(sud => { Address addr; program.Architecture.TryParseAddress(sud.Address, out addr); return(new KeyValuePair <Address, GlobalDataItem_v2>( addr, sud)); }) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.Heuristics != null) { user.Heuristics.UnionWith(sUser.Heuristics.Select(h => h.Name)); } program.EnvironmentMetadata = project.LoadedMetadata; }
private void Awake() { xmlOptions = new XmlOptions(); xmlOptions.CompactOutput = false; xmlBuilder = new StringBuilder(); logBuilder = new StringBuilder(); MovieDatabase.SerializationLog = logBuilder; Actor.SerializationLog = logBuilder; Producer.SerializationLog = logBuilder; Production.SerializationLog = logBuilder; }
public void LoadUserData(UserData_v3 sUser, Program program, UserData user) { if (sUser == null) { return; } user.OnLoadedScript = sUser.OnLoadedScript; if (sUser.Processor != null) { program.User.Processor = sUser.Processor.Name; if (program.Architecture == null && !string.IsNullOrEmpty(program.User.Processor)) { program.Architecture = Services.RequireService <IConfigurationService>().GetArchitecture(program.User.Processor !); } //program.Architecture.LoadUserOptions(); //$TODO } if (sUser.Procedures != null) { user.Procedures = sUser.Procedures .Select(sup => LoadUserProcedure_v1(program, sup)) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.PlatformOptions != null) { program.User.Environment = sUser.PlatformOptions.Name; program.Platform.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.PlatformOptions.Options, StringComparer.OrdinalIgnoreCase)); } if (sUser.GlobalData != null) { user.Globals = sUser.GlobalData .Select(sud => { program.Architecture !.TryParseAddress(sud.Address, out Address addr); return(new KeyValuePair <Address, GlobalDataItem_v2>( addr, sud)); }) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.Heuristics != null) { user.Heuristics.UnionWith(sUser.Heuristics.Select(h => h.Name)); } // Backwards compatibility: older versions used single file policy. program.User.OutputFilePolicy = Program.SingleFilePolicy; program.EnvironmentMetadata = project.LoadedMetadata; }
public void AreEqual_fails(string expectedXml, string actualXml, XmlOptions options, int expectedErrors) { AssertionFailure[] failures = Capture(() => Assert.Xml.AreEqual(expectedXml, actualXml, options)); if (expectedErrors > 0) { Assert.Count(1, failures); Assert.Count(expectedErrors, failures[0].InnerFailures); } else { Assert.IsEmpty(failures); } }
public Program VisitInputFile(string projectFilePath, DecompilerInput_v5 sInput) { //$REVIEW: make this null //if (sInput.Filename == null) // return null; var binAbsPath = ConvertToAbsolutePath(projectFilePath, sInput.Filename) !; var bytes = loader.LoadImageBytes(binAbsPath, 0); var sUser = sInput.User ?? new UserData_v4 { ExtractResources = true, OutputFilePolicy = Program.SingleFilePolicy, }; var address = LoadAddress(sUser, this.arch); var archOptions = XmlOptions.LoadIntoDictionary(sUser.Processor?.Options, StringComparer.OrdinalIgnoreCase); Program program; if (!string.IsNullOrEmpty(sUser.Loader)) { // The presence of an explicit loader name prompts us to // use the LoadRawImage path. var archName = sUser.Processor?.Name; var platform = sUser.PlatformOptions?.Name; program = loader.LoadRawImage(binAbsPath, bytes, address, new LoadDetails { LoaderName = sUser.Loader, ArchitectureName = archName, ArchitectureOptions = archOptions, PlatformName = platform, LoadAddress = sUser.LoadAddress, }); } else { program = loader.LoadExecutable(binAbsPath, bytes, sUser.Loader, address) ?? new Program(); // A previous save of the project was able to read the file, // but now we can't... } LoadUserData(sUser, program, program.User, projectFilePath); program.Filename = binAbsPath; program.DisassemblyDirectory = ConvertToAbsolutePath(projectFilePath, sInput.DisassemblyDirectory); program.SourceDirectory = ConvertToAbsolutePath(projectFilePath, sInput.SourceDirectory); program.IncludeDirectory = ConvertToAbsolutePath(projectFilePath, sInput.IncludeDirectory); program.ResourcesDirectory = ConvertToAbsolutePath(projectFilePath, sInput.ResourcesDirectory); program.EnsureDirectoryNames(program.Filename); program.User.LoadAddress = address; ProgramLoaded?.Fire(this, new ProgramEventArgs(program)); return(program); }
public Program VisitInputFile(string projectFilePath, DecompilerInput_v4 sInput) { var binAbsPath = ConvertToAbsolutePath(projectFilePath, sInput.Filename) !; var bytes = loader.LoadImageBytes(binAbsPath, 0); var sUser = sInput.User ?? new UserData_v4 { ExtractResources = true, }; var address = LoadAddress(sUser, this.arch); var archOptions = XmlOptions.LoadIntoDictionary(sUser.Processor?.Options, StringComparer.OrdinalIgnoreCase); Program program; if (!string.IsNullOrEmpty(sUser.Loader)) { // The presence of an explicit loader name prompts us to // use the LoadRawImage path. var archName = sUser.Processor?.Name; var platform = sUser.PlatformOptions?.Name; program = loader.LoadRawImage(binAbsPath, bytes, address, new LoadDetails { LoaderName = sUser.Loader, ArchitectureName = archName, ArchitectureOptions = archOptions, PlatformName = platform, LoadAddress = sUser.LoadAddress, }); } else { program = loader.LoadExecutable(binAbsPath, bytes, sUser.Loader, address) ?? new Program(); // A previous save of the project was able to read the file, // but now we can't... } LoadUserData(sUser, program, program.User, projectFilePath); program.Filename = binAbsPath; program.DisassemblyDirectory = ConvertToAbsolutePath(projectFilePath, Path.GetDirectoryName(sInput.DisassemblyFilename)); program.SourceDirectory = ConvertToAbsolutePath(projectFilePath, Path.GetDirectoryName(sInput.OutputFilename)); program.IncludeDirectory = ConvertToAbsolutePath(projectFilePath, Path.GetDirectoryName(sInput.TypesFilename)); program.ResourcesDirectory = ConvertToAbsolutePath(projectFilePath, sInput.ResourcesDirectory); program.EnsureDirectoryNames(binAbsPath); program.User.LoadAddress = address; // We are fettered by backwards compatibility here, don't suddenly change behavior // but keep all code in one file. After loading users can change to other policies. program.User.OutputFilePolicy = program.User.OutputFilePolicy ?? Program.SingleFilePolicy; ProgramLoaded?.Invoke(this, new ProgramEventArgs(program)); return(program); }
public XmlFormatter( Func <Stream> outputStreamFactory, IReadOnlyList <string> outputPrefix, XmlOptions xmlOptions, IReadOnlyDictionary <QualifiedName, string> keys, IReadOnlyList <QualifiedName> hiddenKeys, IReadOnlyList <QualifiedName> csvArrays, IReadOnlyList <QualifiedName> xmlElements) : base(outputStreamFactory) { this.outputPrefix = outputPrefix; this.xmlOptions = xmlOptions; this.keys = keys; this.hiddenKeys = new HashSet <QualifiedName>(hiddenKeys); this.csvArrays = new HashSet <QualifiedName>(csvArrays); this.xmlElements = new HashSet <QualifiedName>(xmlElements); }
private OperatingEnvironment LoadEnvironment(Environment_v1 env) { return(new OperatingEnvironmentElement { Name = env.Name, Description = env.Description, MemoryMapFile = env.MemoryMap, TypeName = env.Type, Heuristics = env.Heuristics, TypeLibraries = LoadCollection(env.TypeLibraries, LoadTypeLibraryReference), CharacteristicsLibraries = LoadCollection(env.Characteristics, LoadTypeLibraryReference), Options = env.Options != null ? XmlOptions.LoadIntoDictionary(env.Options .SelectMany(o => o.ChildNodes.OfType <XmlElement>()) .ToArray()) : new Dictionary <string, object>() }); }
private PlatformDefinition LoadEnvironment(Environment_v1 env) { return(new PlatformDefinition { Name = env.Name, Description = env.Description, MemoryMapFile = env.MemoryMap, TypeName = env.Type, Heuristics = env.Heuristics, TypeLibraries = LoadCollection(env.TypeLibraries, LoadTypeLibraryReference), CharacteristicsLibraries = LoadCollection(env.Characteristics, LoadTypeLibraryReference), Architectures = LoadCollection(env.Architectures, LoadPlatformArchitecture), Options = env.Options != null ? XmlOptions.LoadIntoDictionary(env.Options .SelectMany(o => o.ChildNodes.OfType <XmlElement>()) .ToArray(), StringComparer.OrdinalIgnoreCase) : new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase) }); }
public Program VisitInputFile(string projectFilePath, DecompilerInput_v4 sInput) { var binAbsPath = ConvertToAbsolutePath(projectFilePath, sInput.Filename); var bytes = loader.LoadImageBytes(ConvertToAbsolutePath(projectFilePath, sInput.Filename), 0); var sUser = sInput.User ?? new UserData_v4(); var address = LoadAddress(sUser, this.arch); var archOptions = XmlOptions.LoadIntoDictionary(sUser.Processor?.Options, StringComparer.OrdinalIgnoreCase); Program program; if (!string.IsNullOrEmpty(sUser.Loader)) { // The presence of an explicit loader name prompts us to // use the LoadRawImage path. var arch = sUser.Processor.Name; var platform = sUser.PlatformOptions?.Name; program = loader.LoadRawImage(binAbsPath, bytes, address, new LoadDetails { LoaderName = sUser.Loader, ArchitectureName = arch, ArchitectureOptions = archOptions, PlatformName = platform, LoadAddress = sUser.LoadAddress, }); } else { program = loader.LoadExecutable(binAbsPath, bytes, sUser.Loader, address); } LoadUserData(sUser, program, program.User); program.Filename = binAbsPath; program.DisassemblyFilename = ConvertToAbsolutePath(projectFilePath, sInput.DisassemblyFilename); program.IntermediateFilename = ConvertToAbsolutePath(projectFilePath, sInput.IntermediateFilename); program.OutputFilename = ConvertToAbsolutePath(projectFilePath, sInput.OutputFilename); program.TypesFilename = ConvertToAbsolutePath(projectFilePath, sInput.TypesFilename); program.GlobalsFilename = ConvertToAbsolutePath(projectFilePath, sInput.GlobalsFilename); program.EnsureFilenames(program.Filename); program.User.LoadAddress = address; ProgramLoaded.Fire(this, new ProgramEventArgs(program)); return(program); }
private Program LoadProgram(string projectFilePath, DecompilerInput_v5 sInput) { var binAbsPath = ConvertToAbsolutePath(projectFilePath, sInput.Filename) !; var bytes = loader.LoadImageBytes(binAbsPath, 0); var sUser = sInput.User ?? new UserData_v4 { ExtractResources = true, OutputFilePolicy = Program.SingleFilePolicy, }; var address = LoadAddress(sUser, this.arch !); var archOptions = XmlOptions.LoadIntoDictionary(sUser.Processor?.Options, StringComparer.OrdinalIgnoreCase); Program program; if (!string.IsNullOrEmpty(sUser.Loader)) { // The presence of an explicit loader name prompts us to // use the LoadRawImage path. var archName = sUser.Processor?.Name; var platform = sUser.PlatformOptions?.Name; program = loader.LoadRawImage(binAbsPath, bytes, address, new LoadDetails { LoaderName = sUser.Loader, ArchitectureName = archName, ArchitectureOptions = archOptions, PlatformName = platform, LoadAddress = sUser.LoadAddress, }); } else { program = loader.LoadExecutable(binAbsPath, bytes, sUser.Loader, address) ?? new Program(); // A previous save of the project was able to read the file, // but now we can't... } return(program); }
/// <summary> /// Loads the user-specified data. /// </summary> /// <param name="sUser"></param> /// <param name="program"></param> /// <param name="user"></param> public void LoadUserData(UserData_v4 sUser, Program program, UserData user, string projectFilePath) { if (sUser == null) { return; } user.OnLoadedScript = sUser.OnLoadedScript; if (sUser.Processor != null) { user.Processor = sUser.Processor.Name; if (program.Architecture == null && !string.IsNullOrEmpty(user.Processor)) { program.Architecture = Services.RequireService <IConfigurationService>().GetArchitecture(user.Processor); } program.Architecture.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.Processor.Options, StringComparer.OrdinalIgnoreCase)); } if (sUser.PlatformOptions != null) { user.Environment = sUser.PlatformOptions.Name; program.Platform.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.PlatformOptions.Options, StringComparer.OrdinalIgnoreCase)); } if (sUser.Procedures != null) { user.Procedures = sUser.Procedures .Select(sup => LoadUserProcedure_v1(program, sup)) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); user.ProcedureSourceFiles = user.Procedures .Where(kv => !string.IsNullOrEmpty(kv.Value.OutputFile)) .ToDictionary(kv => kv.Key, kv => ConvertToAbsolutePath(projectFilePath, kv.Value.OutputFile)); } if (sUser.GlobalData != null) { user.Globals = sUser.GlobalData .Select(sud => { program.Architecture.TryParseAddress(sud.Address, out Address addr); return(new KeyValuePair <Address, GlobalDataItem_v2>( addr, sud)); }) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.Annotations != null) { user.Annotations = new AnnotationList(sUser.Annotations .Select(LoadAnnotation) .Where(a => a.Address != null) .ToList()); } if (sUser.Heuristics != null) { user.Heuristics.UnionWith(sUser.Heuristics.Select(h => h.Name)); } if (sUser.TextEncoding != null) { Encoding enc = null; try { enc = Encoding.GetEncoding(sUser.TextEncoding); } catch { var diagSvc = Services.RequireService <IDiagnosticsService>(); diagSvc.Warn( "Unknown text encoding '{0}'. Defaulting to platform text encoding.", sUser.TextEncoding); } user.TextEncoding = enc; } program.EnvironmentMetadata = project.LoadedMetadata; if (sUser.Calls != null) { program.User.Calls = sUser.Calls .Select(c => LoadUserCall(c, program)) .Where(c => c != null) .ToSortedList(k => k.Address, v => v); } if (sUser.RegisterValues != null) { program.User.RegisterValues = LoadRegisterValues(sUser.RegisterValues); } if (sUser.JumpTables != null) { program.User.JumpTables = sUser.JumpTables.Select(LoadJumpTable_v4) .Where(t => t != null) .ToSortedList(k => k.Address, v => v); } if (sUser.IndirectJumps != null) { program.User.IndirectJumps = sUser.IndirectJumps .Select(ij => LoadIndirectJump_v4(ij, program)) .Where(ij => ij != null) .ToSortedList(k => k.Item1, v => v.Item2); } if (sUser.Segments != null) { program.User.Segments = sUser.Segments .Select(s => LoadUserSegment_v4(s)) .Where(s => s != null) .ToList(); } program.User.ShowAddressesInDisassembly = sUser.ShowAddressesInDisassembly; program.User.ShowBytesInDisassembly = sUser.ShowBytesInDisassembly; program.User.ExtractResources = sUser.ExtractResources; }
public string FromModel <T>(T model, XmlOptions options) => Xml.FromModel(model, options);
public Data transform(Data data, XMLCryptoContext context) { LOG.Log(POILogger.DEBUG, "transform(data,context)"); LOG.Log(POILogger.DEBUG, "data java type: " + data.Class.Name); OctetStreamData octetStreamData = (OctetStreamData)data; LOG.Log(POILogger.DEBUG, "URI: " + octetStreamData.URI); InputStream octetStream = octetStreamData.OctetStream; RelationshipsDocument relDoc; try { relDoc = RelationshipsDocument.Factory.Parse(octetStream); } catch (Exception e) { throw new TransformException(e.Message, e); } LOG.Log(POILogger.DEBUG, "relationships document", relDoc); CTRelationships rels = relDoc.Relationships; List <CTRelationship> relList = rels.RelationshipList; Iterator <CTRelationship> relIter = rels.RelationshipList.Iterator(); while (relIter.HasNext()) { CTRelationship rel = relIter.Next(); /* * See: ISO/IEC 29500-2:2008(E) - 13.2.4.24 Relationships Transform * Algorithm. */ if (!this.sourceIds.Contains(rel.Id)) { LOG.Log(POILogger.DEBUG, "removing element: " + rel.Id); relIter.Remove(); } else { if (!rel.IsSetTargetMode()) { rel.TargetMode = (/*setter*/ STTargetMode.INTERNAL); } } } // TODO: remove non element nodes ??? LOG.Log(POILogger.DEBUG, "# Relationship elements", relList.Size()); //XmlSort.Sort(rels, new Comparator<XmlCursor>(){ // public int Compare(XmlCursor c1, XmlCursor c2) { // String id1 = ((CTRelationship)c1.Object).Id; // String id2 = ((CTRelationship)c2.Object).Id; // return id1.CompareTo(id2); // } //}); try { MemoryStream bos = new MemoryStream(); XmlOptions xo = new XmlOptions(); xo.SaveNoXmlDecl; relDoc.Save(bos, xo); return(new OctetStreamData(new MemoryStream(bos.ToByteArray()))); } catch (IOException e) { throw new TransformException(e.Message, e); } }
public void Assert_Exists(string description, string xml, string path, string expectedValue, XmlOptions options, bool shouldPass) { AssertionFailure[] failures = Capture(() => Assert.Xml.Exists(xml, path, options, expectedValue, description)); Assert.AreEqual(shouldPass ? 0 : 1, failures.Length); }
public void LoadUserData(UserData_v4 sUser, Program program, UserData user, string projectFilePath) { if (sUser == null) return; user.OnLoadedScript = sUser.OnLoadedScript; if (sUser.Processor != null) { user.Processor = sUser.Processor.Name; if (program.Architecture == null && !string.IsNullOrEmpty(user.Processor)) { program.Architecture = Services.RequireService<IConfigurationService>().GetArchitecture(user.Processor!)!; } //$BUG: what if architecture isn't supported? fail the whole thing? program.Architecture!.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.Processor.Options, StringComparer.OrdinalIgnoreCase)); } if (sUser.PlatformOptions != null) { user.Environment = sUser.PlatformOptions.Name; program.Platform.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.PlatformOptions.Options, StringComparer.OrdinalIgnoreCase)); } if (sUser.Procedures != null) { user.Procedures = sUser.Procedures .Select(sup => LoadUserProcedure_v1(program, sup)) .Where(kv => !(kv.Key is null)) .ToSortedList(kv => kv.Key, kv => kv.Value); user.ProcedureSourceFiles = user.Procedures .Where(kv => !string.IsNullOrEmpty(kv.Value.OutputFile)) .ToDictionary(kv => kv.Key!, kv => ConvertToAbsolutePath(projectFilePath, kv.Value.OutputFile)!); } if (sUser.GlobalData != null) { user.Globals = sUser.GlobalData .Select(sud => { program.Architecture.TryParseAddress(sud.Address, out Address addr); return new KeyValuePair<Address, GlobalDataItem_v2>( addr, sud); }) .Where(kv => !(kv.Key is null)) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.Annotations != null) { user.Annotations = new AnnotationList(sUser.Annotations .Select(LoadAnnotation) .Where(a => !(a.Address is null)) .ToList()); } if (sUser.Heuristics != null) { user.Heuristics.UnionWith(sUser.Heuristics .Where(h => !(h.Name is null)) .Select(h => h.Name!)); } if (sUser.TextEncoding != null) { Encoding enc = null; try { enc = Encoding.GetEncoding(sUser.TextEncoding); } catch { listener.Warn( "Unknown text encoding '{0}'. Defaulting to platform text encoding.", sUser.TextEncoding); } user.TextEncoding = enc; } program.EnvironmentMetadata = project.LoadedMetadata; if (sUser.Calls != null) { program.User.Calls = sUser.Calls .Select(c => LoadUserCall(c, program)) .Where(c => c != null && !(c.Address is null)) .ToSortedList(k => k!.Address!, v => v!); } if (sUser.RegisterValues != null) { program.User.RegisterValues = LoadRegisterValues(sUser.RegisterValues); } if (sUser.JumpTables != null) { program.User.JumpTables = sUser.JumpTables.Select(LoadJumpTable_v4) .Where(t => t != null && t.Address != null) .ToSortedList(k => k!.Address, v => v); } if (sUser.IndirectJumps != null) { program.User.IndirectJumps = sUser.IndirectJumps .Select(ij => LoadIndirectJump_v4(ij, program)) .Where(ij => ij.Item1 != null) .ToSortedList(k => k!.Item1, v => v!.Item2); } if (sUser.Segments != null) { program.User.Segments = sUser.Segments .Select(s => LoadUserSegment_v4(s)) .Where(s => s != null) .ToList(); } program.User.ShowAddressesInDisassembly = sUser.ShowAddressesInDisassembly; program.User.ShowBytesInDisassembly = sUser.ShowBytesInDisassembly; program.User.ExtractResources = sUser.ExtractResources; // Backwards compatibility: older versions used single file policy. program.User.OutputFilePolicy = sUser.OutputFilePolicy ?? Program.SingleFilePolicy; program.User.AggressiveBranchRemoval = sUser.AggressiveBranchRemoval; }
public void LoadUserData(UserData_v4 sUser, Program program, UserData user) { if (sUser == null) { return; } user.OnLoadedScript = sUser.OnLoadedScript; if (sUser.Processor != null) { program.User.Processor = sUser.Processor.Name; if (program.Architecture == null && !string.IsNullOrEmpty(program.User.Processor)) { program.Architecture = Services.RequireService <IConfigurationService>().GetArchitecture(program.User.Processor); } program.Architecture.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.Processor.Options)); } if (sUser.Procedures != null) { user.Procedures = sUser.Procedures .Select(sup => LoadUserProcedure_v1(program, sup)) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.PlatformOptions != null) { program.User.Environment = sUser.PlatformOptions.Name; program.Platform.LoadUserOptions(XmlOptions.LoadIntoDictionary(sUser.PlatformOptions.Options)); } if (sUser.GlobalData != null) { user.Globals = sUser.GlobalData .Select(sud => { Address addr; program.Architecture.TryParseAddress(sud.Address, out addr); return(new KeyValuePair <Address, GlobalDataItem_v2>( addr, sud)); }) .Where(kv => kv.Key != null) .ToSortedList(kv => kv.Key, kv => kv.Value); } if (sUser.Heuristics != null) { user.Heuristics.UnionWith(sUser.Heuristics.Select(h => h.Name)); } if (sUser.TextEncoding != null) { Encoding enc = null; try { enc = Encoding.GetEncoding(sUser.TextEncoding); } catch { var diagSvc = Services.RequireService <IDiagnosticsService>(); diagSvc.Warn( "Unknown text encoding '{0}'. Defaulting to platform text encoding.", sUser.TextEncoding); } user.TextEncoding = enc; } program.EnvironmentMetadata = project.LoadedMetadata; if (sUser.Calls != null) { program.User.Calls = sUser.Calls .Select(c => LoadUserCall(c, program)) .Where(c => c != null) .ToSortedList(k => k.Address, v => v); } if (sUser.RegisterValues != null) { program.User.RegisterValues = LoadRegisterValues(sUser.RegisterValues); } if (sUser.JumpTables != null) { program.User.JumpTables = sUser.JumpTables.Select(LoadJumpTable_v4) .Where(t => t != null) .ToSortedList(k => k.Address, v => v); } if (user.IndirectJumps != null) { program.User.IndirectJumps = sUser.IndirectJumps .Select(ij => LoadIndirectJump_v4(ij, program)) .Where(ij => ij != null) .ToSortedList(k => k.Item1, v => v.Item2); } }