public Project_v3 Save(Project project) { var inputs = new List<ProjectFile_v3>(); inputs.AddRange(project.Programs.Select(p => VisitProgram(p))); inputs.AddRange(project.MetadataFiles.Select(m => VisitMetadataFile(m))); var sp = new Project_v3() { Inputs = inputs }; return sp; }
/// <summary> /// Shows UI and allows the user to edit the project properties. /// </summary> /// <param name="project"></param> public bool EditProjectProperties( IDecompilerShellUiService uiSvc, Project_v3 project, Action<Project_v3> updater) { using (var dlg = new EditProjectDialog()) { Attach(dlg); LoadFieldsFromProject(project); if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK) { updater(CreateProjectFromFields()); return true; } } return false; }
/// <summary> /// Shows UI and allows the user to edit the project properties. /// </summary> /// <param name="project"></param> public bool EditProjectProperties( IDecompilerShellUiService uiSvc, Project_v3 project, Action <Project_v3> updater) { using (var dlg = new EditProjectDialog()) { Attach(dlg); LoadFieldsFromProject(project); if (uiSvc.ShowModalDialog(dlg) == Gui.DialogResult.OK) { updater(CreateProjectFromFields()); return(true); } } return(false); }
private Project_v3 CreateTestProject() { var project = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = "test.exe", DisassemblyFilename = "test.asm", IntermediateFilename = "test.dis", TypesFilename = "test.h", OutputFilename = "test.c", } } }; return(project); }
private void LoadFieldsFromProject(Project_v3 project) { if (project == null || project.Inputs == null || project.Inputs.Count == 0) { return; } var input = project.Inputs[0] as DecompilerInput_v3; if (input == null) { return; } dlg.BinaryFilename.Text = input.Filename; dlg.Disassembly.Text = input.DisassemblyFilename; dlg.IntermediateFilename.Text = input.IntermediateFilename; dlg.TypesFilename.Text = input.TypesFilename; dlg.OutputFilename.Text = input.OutputFilename; // dlg.OutputFilename.Text = project.Output.GloblalsFilename }
private Project_v3 CreateProjectFromFields() { Project_v3 project = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = dlg.BinaryFilename.Text, DisassemblyFilename = dlg.Disassembly.Text, IntermediateFilename = dlg.IntermediateFilename.Text, TypesFilename = dlg.TypesFilename.Text, OutputFilename = dlg.OutputFilename.Text, //project.Output.GloblalsFilename = dlg.OutputFilename.Text; } } }; return(project); }
private Project_v3 CreateTestProject() { var project = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = "test.exe", DisassemblyFilename = "test.asm", IntermediateFilename = "test.dis", TypesFilename = "test.h", OutputFilename = "test.c", } } }; return project; }
private void LoadFieldsFromProject(Project_v3 project) { if (project == null || project.Inputs == null || project.Inputs.Count == 0) return; var input = project.Inputs[0] as DecompilerInput_v3; if (input == null) return; dlg.BinaryFilename.Text = input.Filename; dlg.Disassembly.Text = input.DisassemblyFilename; dlg.IntermediateFilename.Text = input.IntermediateFilename; dlg.TypesFilename.Text = input.TypesFilename; dlg.OutputFilename.Text = input.OutputFilename; // dlg.OutputFilename.Text = project.Output.GloblalsFilename }
private Project_v3 CreateProjectFromFields() { Project_v3 project = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = dlg.BinaryFilename.Text, DisassemblyFilename = dlg.Disassembly.Text, IntermediateFilename = dlg.IntermediateFilename.Text, TypesFilename = dlg.TypesFilename.Text, OutputFilename = dlg.OutputFilename.Text, //project.Output.GloblalsFilename = dlg.OutputFilename.Text; } } }; return project; }
public void Save(Project_v3 project, TextWriter sw) { XmlSerializer ser = SerializedLibrary.CreateSerializer_v3(typeof(Project_v3)); ser.Serialize(sw, project); }
private void When_SaveToTextWriter(Program program, TextWriter sw) { var saver = new ProjectSaver(); var sProj = new Project_v3 { Inputs = { saver.VisitProgram(program) } }; var writer = new FilteringXmlWriter(sw); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v3(typeof(Project_v3)); ser.Serialize(writer, sProj); }
public void SudWrite() { Project_v3 ud = new Project_v3 { Inputs = { new DecompilerInput_v3 { DisassemblyFilename = "foo.asm", IntermediateFilename = "foo.cod", User = new UserData_v3 { Procedures = { 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) } } } } }, LoadAddress = "0x1000:0x0", } } } }; using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt")) { var writer = new FilteringXmlWriter(fut.TextWriter); writer.Formatting = System.Xml.Formatting.Indented; XmlSerializer ser = SerializedLibrary.CreateSerializer_v3(typeof(Project_v3)); ser.Serialize(writer, ud); fut.AssertFilesEqual(); } }
public void Ps_Load_v3() { var bytes = new byte[100]; loader.Stub(l => l.LoadImageBytes(null, 0)).IgnoreArguments().Return(bytes); loader.Stub(l => l.LoadExecutable(null, null, null)).IgnoreArguments().Return( new Program { Architecture = arch }); mr.ReplayAll(); var sp = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = "f.exe", User = new UserData_v3 { Procedures = { new Procedure_v1 { Name = "Fn", Decompile = true, Characteristics = new ProcedureCharacteristics { Terminates = true, }, Address = "113300", Signature = new SerializedSignature { ReturnValue = new Argument_v1 { Type = new PrimitiveType_v1(Domain.SignedInt, 4), }, Arguments = new Argument_v1[] { new Argument_v1 { Name = "a", Kind = new StackVariable_v1(), Type = new PrimitiveType_v1(Domain.Character, 2) }, new Argument_v1 { Name = "b", Kind = new StackVariable_v1(), Type = new PointerType_v1 { DataType = new PrimitiveType_v1(Domain.Character, 2) } } } } } } } } } }; var ps = new ProjectLoader(sc, loader); var p = ps.LoadProject("c:\\tmp\\fproj.proj", sp); Assert.AreEqual(1, p.Programs.Count); var inputFile = p.Programs[0]; Assert.AreEqual(1, inputFile.User.Procedures.Count); Assert.AreEqual("Fn", inputFile.User.Procedures.First().Value.Name); }
public void Save_v3() { var sp = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename ="foo.exe", User = new UserData_v3 { Heuristics = { new Heuristic_v3 { Name = "shingle" } } } }, new AssemblerFile_v3 { Filename="foo.asm", Assembler="x86-att" } } }; var sw = new StringWriter(); new ProjectLoader(sc, loader).Save(sp, sw); Console.WriteLine(sw); }
public void Prld_LoadUserDefinedMetadata() { var sProject = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = "foo.exe", }, new MetadataFile_v3 { Filename = "meta1.xml", }, new MetadataFile_v3 { Filename = "meta2.xml", }, } }; var types1 = new Dictionary<string, DataType>() { {"USRTYPE1", PrimitiveType.Word16} }; var types2 = new Dictionary<string, DataType>() { {"USRTYPE2", PrimitiveType.Word32} }; var ldr = mockFactory.CreateLoader(); var platform = mockFactory.CreatePlatform(); mockFactory.CreateLoadMetadataStub( @"c:\meta1.xml", platform, new TypeLibrary( types1, new Dictionary<string, ProcedureSignature>() ) ); mockFactory.CreateLoadMetadataStub( @"c:\meta2.xml", platform, new TypeLibrary( types2, new Dictionary<string, ProcedureSignature>() ) ); var prld = new ProjectLoader(sc, ldr); var project = prld.LoadProject(@"c:\foo.project", sProject); Assert.AreEqual(2, project.Programs[0].Metadata.Types.Count); Assert.AreEqual( "word16", project.Programs[0].Metadata.Types["USRTYPE1"].ToString() ); Assert.AreEqual( "word32", project.Programs[0].Metadata.Types["USRTYPE2"].ToString() ); }
public void Prld_MakePathsAbsolute() { var sProject = new Project_v3 { Inputs = { new DecompilerInput_v3 { Filename = "foo.exe", } } }; var ldr = mr.Stub<ILoader>(); ldr.Stub(l => l.LoadExecutable(null, null, null)).IgnoreArguments().Return(new Program()); ldr.Stub(l => l.LoadImageBytes(null, 0)).IgnoreArguments().Return(new byte[1000]); mr.ReplayAll(); var prld = new ProjectLoader(sc, ldr); var project = prld.LoadProject(@"c:/users/bob/projects/foo.project", sProject); Assert.AreEqual(@"c:\users\bob\projects\foo.exe", project.Programs[0].Filename); }
public void SudLoadProgramOptions() { var sProject = new Project_v3 { Inputs = { new DecompilerInput_v3 { User = new UserData_v3 { Heuristics = { new Heuristic_v3 { Name="HeuristicScanning" } } } } } }; var loader = mr.Stub<ILoader>(); loader.Stub(l => l.LoadImageBytes(null, 0)) .IgnoreArguments() .Return(new byte[10]); loader.Stub(l => l.LoadExecutable(null, null, null)) .IgnoreArguments() .Return(new Program()); mr.ReplayAll(); var ploader = new ProjectLoader(sc, loader); var project = ploader.LoadProject(sProject); Assert.IsTrue(project.Programs[0].User.Heuristics.Contains("HeuristicScanning")); }
/// <summary> /// Loads a Project object from its serialized representation. First loads the program /// and then any extra metadata. /// </summary> /// <param name="sp"></param> /// <returns></returns> public Project LoadProject(Project_v3 sp) { var typelibs = sp.Inputs.OfType<MetadataFile_v3>().Select(m => VisitMetadataFile(m)); var programs = sp.Inputs.OfType<DecompilerInput_v3>().Select(s => VisitInputFile(s)); var asm = sp.Inputs.OfType<AssemblerFile_v3>().Select(s => VisitAssemblerFile(s)); project.Programs.AddRange(programs); project.MetadataFiles.AddRange(typelibs); return this.project; }