Exemplo n.º 1
0
        public override ImageSymbol AdjustImageSymbol(ImageSymbol sym)
        {
            if (sym.Type != SymbolType.Code &&
                sym.Type != SymbolType.ExternalProcedure &&
                sym.Type != SymbolType.Procedure)
            {
                return(sym);
            }
            if ((sym.Address.ToLinear() & 1) == 0)
            {
                return(sym);
            }
            if (archMips16e == null)
            {
                var cfgSvc = loader.Services.RequireService <IConfigurationService>();
                this.archMips16e = cfgSvc.GetArchitecture(loader.Architecture.Name);
                archMips16e.LoadUserOptions(new Dictionary <string, object>
                {
                    { "decoder", "mips16e" }
                });
            }
            var addrNew = sym.Address - 1;
            var symNew  = ImageSymbol.Create(
                sym.Type,
                archMips16e,
                addrNew,
                sym.Name,
                sym.DataType,
                !sym.NoDecompile);

            symNew.ProcessorState = sym.ProcessorState;
            return(symNew);
        }
Exemplo n.º 2
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);
        }