Пример #1
0
 private void LoadFieldsFromProject(Project_v1 project)
 {
     dlg.BinaryFilename.Text       = project.Input.Filename;
     dlg.BaseAddress.Text          = project.Input.Address;
     dlg.Disassembly.Text          = project.Output.DisassemblyFilename;
     dlg.IntermediateFilename.Text = project.Output.IntermediateFilename;
     dlg.TypesFilename.Text        = project.Output.TypesFilename;
     dlg.OutputFilename.Text       = project.Output.OutputFilename;
     // dlg.OutputFilename.Text = project.Output.GloblalsFilename
 }
Пример #2
0
        private Project_v1 CreateTestProject()
        {
            var project = new Project_v1();

            project.Input.Filename              = "test.exe";
            project.Input.Address               = "10000";
            project.Output.DisassemblyFilename  = "test.asm";
            project.Output.IntermediateFilename = "test.dis";
            project.Output.TypesFilename        = "test.h";
            project.Output.OutputFilename       = "test.c";
            return(project);
        }
Пример #3
0
        private Project_v1 CreateProjectFromFields()
        {
            Project_v1 project = new Project_v1();

            project.Input.Filename              = dlg.BinaryFilename.Text;
            project.Input.Address               = dlg.BaseAddress.Text;
            project.Output.DisassemblyFilename  = dlg.Disassembly.Text;
            project.Output.IntermediateFilename = dlg.IntermediateFilename.Text;
            project.Output.TypesFilename        = dlg.TypesFilename.Text;
            project.Output.OutputFilename       = dlg.OutputFilename.Text;
            //project.Output.GloblalsFilename = dlg.OutputFilename.Text;

            return(project);
        }
Пример #4
0
        public void SudRead_v1()
        {
            Project_v1 proj = null;

            using (FileStream stm = new FileStream(FileUnitTester.MapTestPath("Core/SudRead.xml"), FileMode.Open))
            {
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(typeof(Project_v1));
                proj = (Project_v1)ser.Deserialize(stm);
            }
            Assert.AreEqual("10003330", proj.Input.Address);
            Assert.AreEqual(2, proj.UserProcedures.Count);
            Procedure_v1 proc = (Procedure_v1)proj.UserProcedures[0];

            Assert.IsNull(proc.Signature.ReturnValue);
        }
Пример #5
0
 /// <summary>
 /// Shows UI and allows the user to edit the project properties.
 /// </summary>
 /// <param name="project"></param>
 public bool EditProjectProperties(
     IDecompilerShellUiService uiSvc,
     Project_v1 project,
     Action <Project_v1> updater)
 {
     using (var dlg = new EditProjectDialog())
     {
         Attach(dlg);
         LoadFieldsFromProject(project);
         if (uiSvc.ShowModalDialog(dlg) == DialogResult.OK)
         {
             updater(CreateProjectFromFields());
             return(true);
         }
     }
     return(false);
 }
Пример #6
0
        public void SudWrite()
        {
            Project_v1 ud = new Project_v1();

            ud.Input.Address = "0x1000:0x0";
            ud.Output.DisassemblyFilename  = "foo.asm";
            ud.Output.IntermediateFilename = "foo.cod";
            Procedure_v1 proc = new Procedure_v1();

            proc.Name      = "foo";
            proc.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)
                    }
                }
            };
            ud.UserProcedures.Add(proc);

            using (FileUnitTester fut = new FileUnitTester("Core/SudWrite.txt"))
            {
                var writer = new FilteringXmlWriter(fut.TextWriter);
                writer.Formatting = System.Xml.Formatting.Indented;
                XmlSerializer ser = SerializedLibrary.CreateSerializer_v1(typeof(Project_v1));
                ser.Serialize(writer, ud);
                fut.AssertFilesEqual();
            }
        }
Пример #7
0
        public void Ps_Load_v1()
        {
            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_v1
            {
                Input = new DecompilerInput_v1
                {
                    Filename = "f.exe",
                },
                UserProcedures =
                {
                    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(loader);
            var p  = ps.LoadProject(sp);

            Assert.AreEqual(1, p.Programs.Count);
            var inputFile = p.Programs[0];

            Assert.AreEqual(1, inputFile.UserProcedures.Count);
            Assert.AreEqual("Fn", inputFile.UserProcedures.First().Value.Name);
        }