Пример #1
0
        public MetadataLoader?CreateLoader(TypeLibraryDefinition tlElement, string filename, byte[] bytes)
        {
            Type?loaderType = null;

            if (string.IsNullOrEmpty(tlElement.Loader))
            {
                // By default, assume TypeLibraryLoader is intended.
                loaderType = typeof(TypeLibraryLoader);
            }
            else
            {
                var cfgSvc     = services.RequireService <IConfigurationService>();
                var listener   = services.RequireService <DecompilerEventListener>();
                var ldrElement = cfgSvc.GetImageLoader(tlElement.Loader !);
                if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName))
                {
                    var svc = services.RequireService <IPluginLoaderService>();
                    loaderType = svc.GetType(ldrElement.TypeName);
                }
                if (loaderType == null)
                {
                    listener.Warn(
                        "Metadata loader type '{0}' is unknown.",
                        tlElement.Loader !);
                    return(null);
                }
            }
            return((MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes));
        }
Пример #2
0
        public TypeLibrary LoadMetadataIntoLibrary(IPlatform platform, TypeLibraryDefinition tlElement, TypeLibrary libDst)
        {
            var cfgSvc   = services.RequireService <IConfigurationService>();
            var fsSvc    = services.RequireService <IFileSystemService>();
            var listener = services.RequireService <DecompilerEventListener>();

            try
            {
                if (tlElement.Name == null)
                {
                    return(libDst);
                }
                string libFileName = cfgSvc.GetInstallationRelativePath(tlElement.Name);
                if (!fsSvc.FileExists(libFileName))
                {
                    return(libDst);
                }

                byte[]         bytes  = fsSvc.ReadAllBytes(libFileName);
                MetadataLoader?loader = CreateLoader(tlElement, libFileName, bytes);
                if (loader == null)
                {
                    return(libDst);
                }
                var lib = loader.Load(platform, tlElement.Module, libDst);
                return(lib);
            }
            catch (Exception ex)
            {
                listener.Error(ex, string.Format("Unable to load metadata file {0}.", tlElement.Name));
                return(libDst);
            }
        }
Пример #3
0
        public MetadataLoader CreateLoader(TypeLibraryDefinition tlElement, string filename, byte[] bytes)
        {
            Type loaderType = null;

            if (string.IsNullOrEmpty(tlElement.Loader))
            {
                // By default, assume TypeLibraryLoader is intended.
                loaderType = typeof(TypeLibraryLoader);
            }
            else
            {
                var cfgSvc     = services.RequireService <IConfigurationService>();
                var diagSvc    = services.RequireService <IDiagnosticsService>();
                var ldrElement = cfgSvc.GetImageLoader(tlElement.Loader);
                if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName))
                {
                    loaderType = Type.GetType(ldrElement.TypeName, false);
                }
                if (loaderType == null)
                {
                    diagSvc.Warn(
                        "Metadata loader type '{0}' is unknown.",
                        tlElement.Loader);
                    return(null);
                }
            }
            return((MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes));
        }
Пример #4
0
 private void Expect_TypeLibraryLoaderService_LoadLibrary(TypeLibraryDefinition expected, TypeLibrary dstLib)
 {
     environmentMetadata = dstLib;
     tlSvc.Setup(t => t.LoadMetadataIntoLibrary(
                     It.IsNotNull <IPlatform>(),
                     It.Is <TypeLibraryDefinition>(a => a.Name == expected.Name),
                     It.IsNotNull <TypeLibrary>()))
     .Returns(dstLib)
     .Verifiable();
 }