Example #1
0
 private void LoadUserData(DecompilerInput_v2 sInput, Program program, UserData user)
 {
     if (sInput.UserProcedures != null)
     {
         user.Procedures = sInput.UserProcedures
                 .Select(sup => LoadUserProcedure_v1(program, sup))
                 .Where(kv => kv.Key != null)
                 .ToSortedList(kv => kv.Key, kv => kv.Value);
     }
     if (sInput.UserGlobalData != null)
     {
         user.Globals = sInput.UserGlobalData
             .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);
     }
     user.OnLoadedScript = sInput.OnLoadedScript;
     if (sInput.Options != null)
     {
         program.User.Heuristics.Add("shingle");
     }
     // Backwards compatibility: older versions used single file policy.
     program.User.OutputFilePolicy = Program.SingleFilePolicy;
 }
Example #2
0
 private void LoadUserData(DecompilerInput_v2 sInput, Program program, UserData user)
 {
     if (sInput.UserProcedures != null)
     {
         user.Procedures = sInput.UserProcedures
                           .Select(sup => LoadUserProcedure_v1(program, sup))
                           .Where(kv => kv.Key != null)
                           .ToSortedList(kv => kv.Key, kv => kv.Value);
     }
     if (sInput.UserGlobalData != null)
     {
         user.Globals = sInput.UserGlobalData
                        .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);
     }
     user.OnLoadedScript = sInput.OnLoadedScript;
     if (sInput.Options != null)
     {
         program.User.Heuristics.Add("shingle");
     }
 }
Example #3
0
        private void LoadUserData(DecompilerInput_v2 sInput, Program program, UserData user)
        {
            if (sInput.UserProcedures != null)
            {
                user.Procedures = sInput.UserProcedures
                                  .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 (sInput.UserGlobalData != null)
            {
                user.Globals = sInput.UserGlobalData
                               .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);
            }
            var tlDeser = CreateTypeLibraryDeserializer();

            foreach (var kv in user.Globals)
            {
                var dt   = kv.Value.DataType.Accept(tlDeser);
                var item = new ImageMapItem((uint)dt.Size)
                {
                    Address  = kv.Key,
                    DataType = dt,
                    Name     = kv.Value.Name,
                };
                if (item.Size > 0)
                {
                    program.ImageMap.AddItemWithSize(kv.Key, item);
                }
                else
                {
                    program.ImageMap.AddItem(kv.Key, item);
                }
            }
            user.OnLoadedScript = sInput.OnLoadedScript;
            if (sInput.Options != null)
            {
                program.User.Heuristics.Add("shingle");
            }
            program.EnvironmentMetadata = project.LoadedMetadata;
        }
Example #4
0
        public Program VisitInputFile(string projectFilePath, DecompilerInput_v2 sInput)
        {
            var binFilename = ConvertToAbsolutePath(projectFilePath, sInput.Filename);
            var bytes       = loader.LoadImageBytes(binFilename, 0);
            var program     = loader.LoadExecutable(binFilename, bytes, null, null);

            program.Filename = binFilename;
            this.platform    = program.Platform;
            LoadUserData(sInput, program, program.User);

            program.DisassemblyDirectory = Path.GetDirectoryName(sInput.DisassemblyFilename);
            program.SourceDirectory      = Path.GetDirectoryName(sInput.OutputFilename);
            program.IncludeDirectory     = Path.GetDirectoryName(sInput.TypesFilename);
            program.EnsureDirectoryNames(sInput.Filename);
            ProgramLoaded.Fire(this, new ProgramEventArgs(program));
            return(program);
        }
Example #5
0
        public Program VisitInputFile(string projectFilePath, DecompilerInput_v2 sInput)
        {
            var binFilename = ConvertToAbsolutePath(projectFilePath, sInput.Filename);
            var bytes       = loader.LoadImageBytes(binFilename, 0);
            var program     = loader.LoadExecutable(binFilename, bytes, null);

            program.Filename = binFilename;
            LoadUserData(sInput, program, program.User);

            program.DisassemblyFilename  = sInput.DisassemblyFilename;
            program.IntermediateFilename = sInput.IntermediateFilename;
            program.OutputFilename       = sInput.OutputFilename;
            program.TypesFilename        = sInput.TypesFilename;
            program.GlobalsFilename      = sInput.GlobalsFilename;
            program.EnsureFilenames(sInput.Filename);
            ProgramLoaded.Fire(this, new ProgramEventArgs(program));
            return(program);
        }
Example #6
0
        public Program VisitInputFile(DecompilerInput_v2 sInput)
        {
            var bytes   = loader.LoadImageBytes(sInput.Filename, 0);
            var program = loader.LoadExecutable(sInput.Filename, bytes, null);

            program.Filename = sInput.Filename;
            if (sInput.UserProcedures != null)
            {
                program.UserProcedures = sInput.UserProcedures
                                         .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 (sInput.UserGlobalData != null)
            {
                program.UserGlobalData = sInput.UserGlobalData
                                         .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);
            }
            foreach (var kv in program.UserGlobalData)
            {
                var dt   = kv.Value.DataType.BuildDataType(program.TypeFactory);
                var item = new ImageMapItem((uint)dt.Size)
                {
                    Address  = kv.Key,
                    DataType = dt,
                };
                if (item.Size > 0)
                {
                    program.ImageMap.AddItemWithSize(kv.Key, item);
                }
                else
                {
                    program.ImageMap.AddItem(kv.Key, item);
                }
            }
            program.DisassemblyFilename  = sInput.DisassemblyFilename;
            program.IntermediateFilename = sInput.IntermediateFilename;
            program.OutputFilename       = sInput.OutputFilename;
            program.TypesFilename        = sInput.TypesFilename;
            program.GlobalsFilename      = sInput.GlobalsFilename;
            program.EnsureFilenames(sInput.Filename);
            program.OnLoadedScript = sInput.OnLoadedScript;
            if (sInput.Options != null)
            {
                program.Options.HeuristicScanning = sInput.Options.HeuristicScanning;
            }
            ProgramLoaded.Fire(this, new ProgramEventArgs(program));
            return(program);
        }