public void Sud_SaveMetadataReference()
        {
            Given_Architecture();
            Given_TestOS_Platform();
            var project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Architecture = arch.Object,
                        Platform     = platform.Object,
                        Location     = ImageLocation.FromUri(OsPath.Absolute("test", "foo.exe")),
                    }
                },
                MetadataFiles =
                {
                    new MetadataFile
                    {
                        Location   = ImageLocation.FromUri(OsPath.Absolute("test", "foo.def")),
                        ModuleName = "foo.def",
                    }
                }
            };

            var ps       = new ProjectSaver(sc);
            var sProject = ps.Serialize(ImageLocation.FromUri(OsPath.Absolute("test", "foo.project")), project);

            Assert.AreEqual(1, sProject.MetadataFiles.Count);
            Assert.AreEqual("foo.def", sProject.MetadataFiles[0].Location);
            Assert.AreEqual("foo.def", sProject.MetadataFiles[0].ModuleName);
        }
Example #2
0
        /// <summary>
        /// Saves the project.
        /// </summary>
        /// <returns>False if the user cancelled the save, true otherwise.</returns>
        public bool Save()
        {
            if (decompilerSvc.Decompiler == null)
            {
                return(true);
            }
            if (string.IsNullOrEmpty(this.ProjectFileName))
            {
                string newName = PromptForFilename(
                    Path.ChangeExtension(
                        decompilerSvc.Decompiler.Project.Programs[0].Filename,
                        Project_v1.FileExtension));
                if (newName == null)
                {
                    return(false);
                }
                ProjectFileName = newName;
                mru.Use(newName);
            }

            using (TextWriter sw = CreateTextWriter(ProjectFileName))
            {
                //$REFACTOR: rule of Demeter, push this into a Save() method.
                var sp = new ProjectSaver().Save(decompilerSvc.Decompiler.Project);
                new ProjectLoader(sc, loader).Save(sp, sw);
            }
            return(true);
        }
Example #3
0
        private void Open()
        {
            try
            {
                Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog
                {
                    FileName   = "Project",
                    DefaultExt = ".xml",
                    Filter     = "(XML documents .xml)|*.xml"
                };

                if (dlg.ShowDialog() == true)
                {
                    this.savePath = dlg.FileName;

                    ProjectSaver saver = new ProjectSaver();
                    mainProcessNumber   = saver.LoadProjectExecute(dlg.FileName, testTabControl, drawAreas, processes, out mainProcess);
                    processNamesCounter = testTabControl.Items.Count;
                    SetTheme();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #4
0
        public void Sud_SaveMetadataReference()
        {
            Given_Architecture();
            Given_TestOS_Platform();
            var project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Architecture = arch.Object,
                        Platform     = platform.Object,
                        Filename     = "c:\\test\\foo.exe",
                    }
                },
                MetadataFiles =
                {
                    new MetadataFile
                    {
                        Filename   = "c:\\test\\foo.def",
                        ModuleName = "foo.def",
                    }
                }
            };

            var ps = new ProjectSaver(sc);

            ps.Serialize("c:\\test\\foo.project", project);
            Assert.AreEqual(1, project.MetadataFiles.Count);
            Assert.AreEqual("c:\\test\\foo.def", project.MetadataFiles[0].Filename);
            Assert.AreEqual("foo.def", project.MetadataFiles[0].ModuleName);
        }
Example #5
0
        public void Sud_SaveMetadataReference()
        {
            var project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Filename = "c:\\test\\foo.exe",
                    }
                },
                MetadataFiles =
                {
                    new MetadataFile
                    {
                        Filename   = "c:\\test\\foo.def",
                        ModuleName = "foo.def",
                    }
                }
            };
            var ps       = new ProjectSaver();
            var sProject = ps.Save(project);

            Assert.AreEqual(1, project.MetadataFiles.Count);
            Assert.AreEqual("c:\\test\\foo.def", project.MetadataFiles[0].Filename);
            Assert.AreEqual("foo.def", project.MetadataFiles[0].ModuleName);
        }
Example #6
0
        private void ProjectFormClosing(object sender, FormClosingEventArgs e)
        {
            if (IsSaveRequired)
            {
                var dialogResult = MessageBox.Show(
                    "The project has been changed. Do you want to save the changes?",
                    "Save project",
                    MessageBoxButtons.YesNoCancel,
                    MessageBoxIcon.Question,
                    MessageBoxDefaultButton.Button3);

                if (dialogResult == DialogResult.Yes)
                {
                    var result = ProjectSaver.Save(Project);

                    DialogResult = result.Item1;
                    Project      = result.Item2;
                }

                if (dialogResult == DialogResult.Cancel || DialogResult == DialogResult.Cancel)
                {
                    e.Cancel = true;
                    return; //don't dispose
                }
            }

            _disposables.Dispose();
        }
Example #7
0
        /// <summary>
        /// Saves the project.
        /// </summary>
        /// <returns>False if the user cancelled the save, true otherwise.</returns>
        public bool Save()
        {
            if (decompilerSvc.Decompiler == null)
            {
                return(true);
            }
            if (string.IsNullOrEmpty(this.ProjectFileName))
            {
                string newName = uiSvc.ShowSaveFileDialog(
                    Path.ChangeExtension(
                        decompilerSvc.Decompiler.Project.Programs[0].Filename,
                        Project_v3.FileExtension));
                if (newName == null)
                {
                    return(false);
                }
                ProjectFileName = newName;
                RememberFilenameInMru(newName);
            }

            var fsSvc    = Services.RequireService <IFileSystemService>();
            var saver    = new ProjectSaver(sc);
            var sProject = saver.Serialize(ProjectFileName, decompilerSvc.Decompiler.Project);

            using (var xw = fsSvc.CreateXmlWriter(ProjectFileName))
            {
                saver.Save(sProject, xw);
            }
            return(true);
        }
Example #8
0
        static void Main(String[] args)
        {
            ProjectDef projectDef = DefineProject();

            ProjectSaver.Save(projectDef, "D:/Temporary/Luminary");

            ProjectLoader loader           = new ProjectLoader();
            ProjectDef    projectDefLoaded = loader.Load(@"D:/Temporary/Luminary/Test.json");
        }
Example #9
0
        public void SudSaveProgramOptions()
        {
            var program = new Program();

            program.Options.HeuristicScanning = true;

            var pSaver = new ProjectSaver();
            var file   = pSaver.VisitProgram(program);
            var ip     = (DecompilerInput_v2)file;

            Assert.IsTrue(ip.Options.HeuristicScanning);
        }
Example #10
0
        private void BtnCreateNewProjectClick(object sender, EventArgs e)
        {
            var result = ProjectSaver.Save();

            DialogResult = result.Item1;
            Project      = result.Item2;

            if (DialogResult == DialogResult.OK && Project != null)
            {
                Close();
            }
        }
 private void When_SaveToTextWriter(Program program, TextWriter sw)
 {
     var saver = new ProjectSaver(sc);
     var sProj = new Project_v5
     {
         Inputs = { saver.VisitProgram("foo.exe", program) }
     };
     var writer = new FilteringXmlWriter(sw);
     writer.Formatting = System.Xml.Formatting.Indented;
     XmlSerializer ser = SerializedLibrary.CreateSerializer_v5(typeof(Project_v5));
     ser.Serialize(writer, sProj);
 }
 public void SudSaveProgramOptions()
 {
     var program = new Program();
     program.User.Heuristics.Add("shingle");
     program.User.TextEncoding = Encoding.GetEncoding("windows-1251");
 
     var pSaver = new ProjectSaver(sc);
     var file = pSaver.VisitProgram("foo.proj", program);
     var ip = (DecompilerInput_v5)file;
     Assert.IsTrue(ip.User.Heuristics.Any(h => h.Name == "shingle"));
     Assert.AreEqual("windows-1251", ip.User.TextEncoding);
 }
Example #13
0
        public void Save_ProjectWithoutAssemblyVersion_ShouldSaveVersionOnly()
        {
            var testProject = TestPathHelper.GetTestProjectPath("TO_MODIFY");
            var newPatch    = Convert.ToInt32((DateTime.Now - DateTime.Today).TotalSeconds);
            var project     = new Project("TO_MODIFY", new Version(1, 1, newPatch, ""),
                                          Option <AssemblyVersion> .None, testProject);

            ProjectSaver.Save(project);

            var savedVersion            = $"1.1.{newPatch}";
            var notSavedAssemblyVersion = $"1.1.{newPatch}.0";

            NodeFinder.GetVersionNodeValue(testProject, VersionNode.Version).ShouldBe(savedVersion);
            NodeFinder.GetVersionNodeValue(testProject, VersionNode.AssemblyVersion).ShouldNotBe(notSavedAssemblyVersion);
        }
Example #14
0
 private void Save()
 {
     try
     {
         if (savePath.Count() != 0)
         {
             var saver = new ProjectSaver();
             saver.SaveProjectExecute(testTabControl, savePath, mainProcessNumber);
         }
         else
         {
             SaveAs();
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Example #15
0
        private void BtnLoadProjectClick(object sender, EventArgs e)
        {
            var projectTask = ProjectLoader.Load(ToggleFormState);

            projectTask.ContinueWith(
                antecedent =>
            {
                Project = antecedent.Result;

                DialogResult = DialogResult.OK;
                Close();
            },
                CancellationToken.None,
                TaskContinuationOptions.OnlyOnRanToCompletion,
                TaskScheduler.FromCurrentSynchronizationContext());

            projectTask.ContinueWith(
                antecedent =>
            {
                DialogResult = MessageBox.Show(
                    "An error occured while reading the project file, continue with an empty project?",
                    "Error retriving the project details",
                    MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Error,
                    MessageBoxDefaultButton.Button2);

                if (DialogResult == DialogResult.OK)
                {
                    var result = ProjectSaver.Save();

                    DialogResult = result.Item1;
                    Project      = result.Item2;
                }

                if (DialogResult == DialogResult.OK && Project != null)
                {
                    Close();
                }
            },
                CancellationToken.None,
                TaskContinuationOptions.OnlyOnCanceled,
                TaskScheduler.FromCurrentSynchronizationContext());
        }
Example #16
0
        private void SaveAs()
        {
            try
            {
                Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog
                {
                    FileName   = "Project",
                    DefaultExt = ".xml",
                    Filter     = "(XMl documents .xml)|*.xml"
                };

                if ((bool)dlg.ShowDialog())
                {
                    var saver = new ProjectSaver();
                    saver.SaveProjectExecute(testTabControl, dlg.FileName, mainProcessNumber);
                    savePath = dlg.FileName;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #17
0
        public void SudSaveScripts()
        {
            var project = new Project
            {
                ScriptFiles =
                {
                    new Mock <ScriptFile>(
                        null, "/var/foo/script.fake", new byte[100]).Object
                },
            };
            var sw     = new StringWriter();
            var writer = new FilteringXmlWriter(sw)
            {
                Formatting = System.Xml.Formatting.Indented
            };
            var ser = SerializedLibrary.CreateSerializer_v5(
                typeof(Project_v5));

            var saver    = new ProjectSaver(sc);
            var sProject = saver.Serialize("/var/foo/foo.proj", project);

            ser.Serialize(writer, sProject);

            var expected = @"<?xml version=""1.0"" encoding=""utf-16""?>
<project xmlns=""http://schemata.jklnet.org/Reko/v5"">
  <script>
    <filename>script.fake</filename>
  </script>
</project>";

            if (sw.ToString() != expected)
            {
                Console.WriteLine("{0}", sw.ToString());
            }
            Assert.AreEqual(expected, sw.ToString());
        }
        public void SudSaveProject()
        {
            Given_Architecture();
            Given_TestOS_Platform();
            var eax       = new RegisterStorage("eax", 0, 0, PrimitiveType.Word32);
            var ecx       = new RegisterStorage("ecx", 1, 0, PrimitiveType.Word32);
            var jumpTable = new ImageMapVectorTable(
                Address.SegPtr(0x1000, 0x400),
                new Address[] {
                Address.SegPtr(0x1000, 0x500),
                Address.SegPtr(0x1000, 0x513),
                Address.SegPtr(0x1000, 0x5BA),
            }, 0);

            Project project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Architecture         = arch,
                        Platform             = platform,
                        SegmentMap           = new SegmentMap(Address.SegPtr(0x1000, 0)), //, new byte[100]),
                        DisassemblyFilename  = "foo.asm",
                        IntermediateFilename = "foo.cod",
                        User = new UserData
                        {
                            Procedures =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x10),
                                    new Procedure_v1
                                    {
                                        Name      = "foo",
                                        Signature = new SerializedSignature
                                        {
                                            ReturnValue = new Argument_v1{
                                                Kind = new Register_v1("eax")
                                            },
                                            Arguments = new Argument_v1[]
                                            {
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                },
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            Globals =
                            {
                                {
                                    Address.SegPtr(0x2000, 0),
                                    new GlobalDataItem_v2     {
                                        Address  = Address.SegPtr(0x2000, 0).ToString(),
                                        DataType = new StringType_v2{
                                            Termination = StringType_v2.ZeroTermination,
                                            CharType    = new PrimitiveType_v1 {
                                                Domain = Domain.Character, ByteSize = 1
                                            }
                                        }
                                    }
                                }
                            },
                            Calls =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x0320),
                                    new UserCallData
                                    {
                                        Address  = Address.SegPtr(0x1000, 0x0320),
                                        NoReturn = true,
                                    }
                                }
                            },
                            RegisterValues =
                            {
                                {
                                    Address.Ptr32(0x012310),
                                    new List <UserRegisterValue>
                                    {
                                        new UserRegisterValue {
                                            Register = eax, Value = Constant.Word32(0x01231)
                                        },
                                        new UserRegisterValue {
                                            Register = ecx, Value = Constant.Word32(0x42424711)
                                        },
                                    }
                                }
                            },
                            IndirectJumps =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x380),
                                    new UserIndirectJump      {
                                        Address       = jumpTable.Address,
                                        Table         = jumpTable,
                                        IndexRegister = new RegisterStorage("R1", 1, 0, PrimitiveType.Word32)
                                    }
                                }
                            },
                            JumpTables =
                            {
                                { jumpTable.Address, jumpTable }
                            }
                        }
                    }
                }
            };

            mr.ReplayAll();

            using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt"))
            {
                FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4));
                Project_v4    ud  = new ProjectSaver(sc).Serialize("/var/foo/foo.proj", project);
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }
Example #19
0
        public void SudSaveProject()
        {
            Given_Architecture();
            Given_TestOS_Platform();
            Project project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Architecture         = arch,
                        Platform             = platform,
                        ImageMap             = new ImageMap(Address.SegPtr(0x1000, 0)), //, new byte[100]),
                        DisassemblyFilename  = "foo.asm",
                        IntermediateFilename = "foo.cod",
                        User = new UserData
                        {
                            Procedures =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x10),
                                    new Procedure_v1
                                    {
                                        Name      = "foo",
                                        Signature = new SerializedSignature
                                        {
                                            ReturnValue = new Argument_v1{
                                                Kind = new Register_v1("eax")
                                            },
                                            Arguments = new Argument_v1[]
                                            {
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                },
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            Globals =
                            {
                                {
                                    Address.SegPtr(0x2000, 0),
                                    new GlobalDataItem_v2 {
                                        Address  = Address.SegPtr(0x2000, 0).ToString(),
                                        DataType = new StringType_v2{
                                            Termination = StringType_v2.ZeroTermination,
                                            CharType    = new PrimitiveType_v1 {
                                                Domain = Domain.Character, ByteSize = 1
                                            }
                                        }
                                    }
                                }
                            },
                            Calls =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x0320),
                                    new UserCallData
                                    {
                                        Address  = Address.SegPtr(0x1000, 0x0320),
                                        NoReturn = true,
                                    }
                                }
                            }
                        }
                    }
                }
            };

            mr.ReplayAll();

            using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt"))
            {
                FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v4(typeof(Project_v4));
                Project_v4    ud  = new ProjectSaver(sc).Save("/var/foo/foo.proj", project);
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }
Example #20
0
        public void SudSaveProject()
        {
            Project project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Image = new LoadedImage(Address.SegPtr(0x1000, 0), new byte[100]),
                        DisassemblyFilename  = "foo.asm",
                        IntermediateFilename = "foo.cod",
                        UserProcedures       = new SortedList <Address, Procedure_v1>
                        {
                            {
                                Address.SegPtr(0x1000, 0x10),
                                new Procedure_v1
                                {
                                    Name      = "foo",
                                    Signature = new SerializedSignature
                                    {
                                        ReturnValue = new Argument_v1{
                                            Kind = new Register_v1("eax")
                                        },
                                        Arguments = new Argument_v1[]
                                        {
                                            new Argument_v1
                                            {
                                                Kind = new StackVariable_v1(),
                                                Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                            },
                                            new Argument_v1
                                            {
                                                Kind = new StackVariable_v1(),
                                                Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        UserGlobalData =
                        {
                            {
                                Address.SegPtr(0x2000, 0),
                                new GlobalDataItem_v2 {
                                    Address  = Address.SegPtr(0x2000, 0).ToString(),
                                    DataType = new StringType_v2{
                                        Termination = StringType_v2.ZeroTermination,
                                        CharType    = new PrimitiveType_v1 {
                                            Domain = Domain.Character, ByteSize = 1
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            };

            using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt"))
            {
                FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v2(typeof(Project_v2));
                Project_v2    ud  = new ProjectSaver().Save(project);
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }
Example #21
0
        public void SudSaveProject()
        {
            Given_Architecture();
            Given_TestOS_Platform();
            var eax       = new RegisterStorage("eax", 0, 0, PrimitiveType.Word32);
            var ecx       = new RegisterStorage("ecx", 1, 0, PrimitiveType.Word32);
            var jumpTable = new ImageMapVectorTable(
                Address.SegPtr(0x1000, 0x400),
                new Address[] {
                Address.SegPtr(0x1000, 0x500),
                Address.SegPtr(0x1000, 0x513),
                Address.SegPtr(0x1000, 0x5BA),
            }, 0);

            Project project = new Project
            {
                Programs =
                {
                    new Program
                    {
                        Architecture         = arch.Object,
                        Platform             = platform.Object,
                        SegmentMap           = new SegmentMap(Address.SegPtr(0x1000, 0)), //, new byte[100]),
                        DisassemblyDirectory = "",
                        User = new UserData
                        {
                            Loader           = "CustomLoader",
                            ExtractResources = true,
                            Procedures       =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x10),
                                    new UserProcedure(Address.SegPtr(0x1000, 0x10), "foo")
                                    {
                                        Signature = new SerializedSignature
                                        {
                                            ReturnValue = new Argument_v1{
                                                Kind = new Register_v1("eax")
                                            },
                                            Arguments = new Argument_v1[]
                                            {
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                },
                                                new Argument_v1
                                                {
                                                    Kind = new StackVariable_v1(),
                                                    Type = new PrimitiveType_v1(Domain.SignedInt, 4)
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            Globals =
                            {
                                {
                                    Address.SegPtr(0x2000, 0),
                                    new UserGlobal(Address.SegPtr(0x2000, 0), "g_20000", new StringType_v2{
                                        Termination = StringType_v2.ZeroTermination,
                                        CharType    = new PrimitiveType_v1 {
                                            Domain = Domain.Character, ByteSize = 1
                                        }
                                    })
                                }
                            },
                            Calls =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x0320),
                                    new UserCallData
                                    {
                                        Address  = Address.SegPtr(0x1000, 0x0320),
                                        NoReturn = true,
                                    }
                                }
                            },
                            RegisterValues =
                            {
                                {
                                    Address.Ptr32(0x012310),
                                    new List <UserRegisterValue>
                                    {
                                        new UserRegisterValue(eax, Constant.Word32(0x01231)),
                                        new UserRegisterValue(ecx, Constant.Word32(0x42424711)),
                                    }
                                }
                            },
                            IndirectJumps =
                            {
                                {
                                    Address.SegPtr(0x1000, 0x380),
                                    new UserIndirectJump {
                                        Address       = jumpTable.Address,
                                        Table         = jumpTable,
                                        IndexRegister = new RegisterStorage("R1", 1, 0, PrimitiveType.Word32)
                                    }
                                }
                            },
                            JumpTables =
                            {
                                { jumpTable.Address, jumpTable }
                            },
                            OutputFilePolicy = Program.SegmentFilePolicy,
                        }
                    }
                }
            };

            using (FileUnitTester fut = new FileUnitTester("Core/SudSaveProject.txt"))
            {
                FilteringXmlWriter writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v5(typeof(Project_v5));
                Project_v5    ud  = new ProjectSaver(sc).Serialize("/var/foo/foo.proj", project);
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }