Ejemplo n.º 1
0
        public LoadDetails GetLoadDetails()
        {
            var    config              = Services.RequireService <IConfigurationService>();
            var    rawFileOption       = (ListOption)this.RawFileTypes.SelectedValue;
            string archName            = null;
            string envName             = null;
            string sAddr               = null;
            string loader              = null;
            EntryPointDefinition entry = null;

            if (rawFileOption != null && rawFileOption.Value != null)
            {
                var raw = (RawFileDefinition)rawFileOption.Value;
                loader   = raw.Loader;
                archName = raw.Architecture;
                envName  = raw.Environment;
                sAddr    = raw.BaseAddress;
                entry    = raw.EntryPoint;
            }
            ArchitectureDefinition archOption = this.GetSelectedArchitecture();
            PlatformDefinition     envOption  = this.GetSelectedEnvironment();

            archName = archName ?? archOption?.Name;
            envName  = envName ?? envOption?.Name;
            sAddr    = sAddr ?? this.AddressTextBox.Text.Trim();

            var arch = config.GetArchitecture(archName);

            if (arch is null)
            {
                throw new InvalidOperationException($"Unable to load {archName} architecture.");
            }
            arch.LoadUserOptions(this.ArchitectureOptions);
            if (!arch.TryParseAddress(sAddr, out var addrBase))
            {
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", sAddr));
            }
            return(new LoadDetails
            {
                LoaderName = loader,
                ArchitectureName = archName,
                ArchitectureOptions = this.ArchitectureOptions,
                PlatformName = envName,
                LoadAddress = sAddr,
                EntryPoint = entry,
            });
        }
Ejemplo n.º 2
0
        private static WorkUnit?MakeWorkUnit(IConfigurationService cfg, ArchitectureDefinition archDef, int seed)
        {
            var arch = cfg.GetArchitecture(archDef.Name !);

            if (arch is null)
            {
                return(null);
            }
            var bytes = new byte[MemorySize];
            var rnd   = new Random(seed);

            rnd.NextBytes(bytes);

            var addr = Address.Create(arch.PointerType, 0x0010_0000);
            var mem  = arch.CreateMemoryArea(addr, bytes);

            return(new WorkUnit(arch, mem, mem.BaseAddress, (int)mem.Length));
        }
Ejemplo n.º 3
0
        private void PopulateModels(ArchitectureDefinition arch)
        {
            var models = arch.Models.Values
                         .OrderBy(m => m.Name)
                         .Select(m => new ListOption(m.Name, m))
                         .ToArray();

            Debug.Print("PopulateModels: models: {0}", models.Length);
            if (models.Length > 0)
            {
                dlg.ArchitectureModels.Enabled    = true;
                dlg.ArchitectureModels.DataSource = new ArrayList(models);
            }
            else
            {
                dlg.ArchitectureModels.DataSource = null;
                dlg.ArchitectureModels.Enabled    = false;
            }
        }
Ejemplo n.º 4
0
        private static void TestArchitecture(RekoConfigurationService cfg, ArchitectureDefinition archDef)
        {
            Console.Out.WriteLine("= Testing {0} ============", archDef.Description);
            var work = MakeWorkUnit(cfg, archDef, 42);

            if (work is null)
            {
                Console.Out.WriteLine("*** Failed to load {0}", archDef.Name);
                return;
            }
            var factories = new RewriterTaskFactory[] {
                new LinearTaskFactory(),
                new ShingleTaskFactory(),
                new LinearShingleTaskFactory()
            };

            foreach (var factory in factories)
            {
                CollectStatistics(work, factory);
            }
        }
Ejemplo n.º 5
0
        public bool OpenBinaryAs(string initialFilename)
        {
            IOpenAsDialog          dlg  = null;
            IProcessorArchitecture arch = null;

            try
            {
                dlg = dlgFactory.CreateOpenAsDialog();
                dlg.FileName.Text       = initialFilename;
                dlg.Services            = sc;
                dlg.ArchitectureOptions = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);
                if (uiSvc.ShowModalDialog(dlg) != DialogResult.OK)
                {
                    return(false);
                }

                var    rawFileOption       = (ListOption)dlg.RawFileTypes.SelectedValue;
                string archName            = null;
                string envName             = null;
                string sAddr               = null;
                string loader              = null;
                EntryPointDefinition entry = null;
                if (rawFileOption != null && rawFileOption.Value != null)
                {
                    var raw = (RawFileDefinition)rawFileOption.Value;
                    loader   = raw.Loader;
                    archName = raw.Architecture;
                    envName  = raw.Environment;
                    sAddr    = raw.BaseAddress;
                    entry    = raw.EntryPoint;
                }
                ArchitectureDefinition archOption = dlg.GetSelectedArchitecture();
                PlatformDefinition     envOption  = dlg.GetSelectedEnvironment();
                archName = archName ?? archOption?.Name;
                envName  = envName ?? envOption?.Name;
                sAddr    = sAddr ?? dlg.AddressTextBox.Text.Trim();
                arch     = config.GetArchitecture(archName);
                if (arch == null)
                {
                    throw new InvalidOperationException(string.Format("Unable to load {0} architecture.", archName));
                }
                arch.LoadUserOptions(dlg.ArchitectureOptions);
                if (!arch.TryParseAddress(sAddr, out var addrBase))
                {
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", sAddr));
                }
                var details = new LoadDetails
                {
                    LoaderName          = loader,
                    ArchitectureName    = archName,
                    ArchitectureOptions = dlg.ArchitectureOptions,
                    PlatformName        = envName,
                    LoadAddress         = sAddr,
                    EntryPoint          = entry,
                };

                OpenBinary(dlg.FileName.Text, (f) => pageInitial.OpenBinaryAs(f, details), f => false);
            }
            catch (Exception ex)
            {
                uiSvc.ShowError(
                    ex,
                    string.Format("An error occurred when opening the binary file {0}.", dlg.FileName.Text));
            }
            return(true);
        }