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); }
/// <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); }
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); } }
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); }
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); }
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(); }
/// <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); }
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"); }
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); }
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); }
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); }
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); } }
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()); }
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); } }
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(); } }
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(); } }
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(); } }
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(); } }