protected Program RewriteProgramMsdos(string sourceFilename, Address addrBase)
        {
            var cfgSvc = MockRepository.GenerateStub <IConfigurationService>();
            var env    = MockRepository.GenerateStub <OperatingEnvironment>();
            var tlSvc  = MockRepository.GenerateStub <ITypeLibraryLoaderService>();

            cfgSvc.Stub(c => c.GetEnvironment("ms-dos")).Return(env);
            cfgSvc.Stub(c => c.GetSignatureFiles()).Return(new List <SignatureFile>());
            env.Stub(e => e.TypeLibraries).Return(new List <ITypeLibraryElement>());
            env.Stub(e => e.CharacteristicsLibraries).Return(new List <ITypeLibraryElement>());
            sc = new ServiceContainer();
            sc.AddService <IConfigurationService>(cfgSvc);
            sc.AddService <DecompilerHost>(new FakeDecompilerHost());
            sc.AddService <DecompilerEventListener>(new FakeDecompilerEventListener());
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            sc.AddService <ITypeLibraryLoaderService>(tlSvc);
            var ldr  = new Loader(sc);
            var arch = new X86ArchitectureReal("x86-real-16");

            program = ldr.AssembleExecutable(
                FileUnitTester.MapTestPath(sourceFilename),
                new X86TextAssembler(sc, arch)
            {
                Platform = new MsdosPlatform(sc, arch)
            },
                addrBase);
            return(RewriteProgram());
        }
Esempio n. 2
0
        public void MspRealModeServices()
        {
            mr.ReplayAll();
            IntelArchitecture arch     = new X86ArchitectureReal();
            IPlatform         platform = new MsdosPlatform(sc, arch);

            var state = arch.CreateProcessorState();

            state.SetRegister(Registers.ah, Constant.Byte(0x3E));
            SystemService svc = platform.FindService(0x21, state);

            Assert.AreEqual("msdos_close_file", svc.Name);
            Assert.AreEqual(1, svc.Signature.Parameters.Length);
            Assert.IsFalse(svc.Characteristics.Terminates, "close() shouldn't terminate program");

            state.SetRegister(Registers.ah, Constant.Byte(0x4C));
            svc = platform.FindService(0x21, state);
            Assert.AreEqual("msdos_terminate", svc.Name);
            Assert.AreEqual(1, svc.Signature.Parameters.Length);
            Assert.IsTrue(svc.Characteristics.Terminates, "terminate() should terminate program");

            state.SetRegister(Registers.ah, Constant.Byte(0x2F));
            svc = platform.FindService(0x21, state);
            Assert.AreEqual("msdos_get_disk_transfer_area_address", svc.Name);
            Assert.AreEqual(0, svc.Signature.Parameters.Length);
            SequenceStorage seq = (SequenceStorage)svc.Signature.ReturnValue.Storage;

            Assert.AreEqual("es", seq.Head.Name);
            Assert.AreEqual("bx", seq.Tail.Name);
        }
Esempio n. 3
0
        protected static Program RewriteMsdosAssembler(string relativePath, string configFile)
        {
            var sc         = new ServiceContainer();
            var arch       = new X86ArchitectureReal(sc, "x86-real-16");
            var cfgSvcMock = new Mock <IConfigurationService>();
            var envMock    = new Mock <PlatformDefinition>();
            var tlSvcMock  = new Mock <ITypeLibraryLoaderService>();

            cfgSvcMock.Setup(c => c.GetEnvironment("ms-dos")).Returns(envMock.Object);
            envMock.Setup(e => e.TypeLibraries).Returns(new List <TypeLibraryDefinition>());
            envMock.Setup(e => e.CharacteristicsLibraries).Returns(new List <TypeLibraryDefinition>());
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            sc.AddService <IConfigurationService>(cfgSvcMock.Object);
            sc.AddService <ITypeLibraryLoaderService>(tlSvcMock.Object);
            Program    program;
            IAssembler asm = new X86TextAssembler(arch);

            using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath)))
            {
                program          = asm.Assemble(Address.SegPtr(0xC00, 0), rdr);
                program.Platform = new MsdosPlatform(sc, arch);
            }
            Rewrite(program, asm, configFile);
            return(program);
        }
Esempio n. 4
0
        public void Setup()
        {
            var arch = new X86ArchitectureReal();

            proc  = Procedure.Create("foo", Address.Ptr32(0x100), arch.CreateFrame());
            alias = new Aliases(proc, arch);
        }
Esempio n. 5
0
        protected Program RewriteProgramMsdos(string sourceFilename, Address addrBase)
        {
            var cfgSvc = new Mock <IConfigurationService>();
            var env    = new Mock <PlatformDefinition>();
            var tlSvc  = new Mock <ITypeLibraryLoaderService>();

            cfgSvc.Setup(c => c.GetEnvironment("ms-dos")).Returns(env.Object);
            cfgSvc.Setup(c => c.GetSignatureFiles()).Returns(new List <SignatureFileDefinition>());
            env.Setup(e => e.TypeLibraries).Returns(new List <TypeLibraryDefinition>());
            env.Setup(e => e.CharacteristicsLibraries).Returns(new List <TypeLibraryDefinition>());
            sc = new ServiceContainer();
            sc.AddService <IConfigurationService>(cfgSvc.Object);
            sc.AddService <IDecompiledFileService>(new FakeDecompiledFileService());
            sc.AddService <DecompilerEventListener>(new FakeDecompilerEventListener());
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            sc.AddService <ITypeLibraryLoaderService>(tlSvc.Object);
            var ldr  = new Loader(sc);
            var arch = new X86ArchitectureReal(sc, "x86-real-16", new Dictionary <string, object>());

            program = ldr.AssembleExecutable(
                FileUnitTester.MapTestPath(sourceFilename),
                new X86TextAssembler(arch),
                new MsdosPlatform(sc, arch),
                addrBase);
            return(RewriteProgram());
        }
Esempio n. 6
0
        protected static Program RewriteMsdosAssembler(string relativePath, string configFile)
        {
            var arch   = new X86ArchitectureReal();
            var sc     = new ServiceContainer();
            var cfgSvc = MockRepository.GenerateStub <IConfigurationService>();
            var env    = MockRepository.GenerateStub <OperatingEnvironment>();
            var tlSvc  = MockRepository.GenerateStub <ITypeLibraryLoaderService>();

            cfgSvc.Stub(c => c.GetEnvironment("ms-dos")).Return(env);
            cfgSvc.Replay();
            env.Stub(e => e.TypeLibraries).Return(new List <ITypeLibraryElement>());
            env.Stub(e => e.CharacteristicsLibraries).Return(new List <ITypeLibraryElement>());
            env.Replay();
            tlSvc.Replay();
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            sc.AddService <IConfigurationService>(cfgSvc);
            sc.AddService <ITypeLibraryLoaderService>(tlSvc);
            Program   program;
            Assembler asm = new X86TextAssembler(sc, arch);

            using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath)))
            {
                program          = asm.Assemble(Address.SegPtr(0xC00, 0), rdr);
                program.Platform = new MsdosPlatform(sc, program.Architecture);
            }
            Rewrite(program, asm, configFile);
            return(program);
        }
Esempio n. 7
0
 public void Setup()
 {
     this.writer    = null;
     this.exeLoader = null;
     this.offNames  = -1;
     this.arch      = new X86ArchitectureReal("x86-real-16");
 }
Esempio n. 8
0
 public void Setup()
 {
     this.writer    = null;
     this.exeLoader = null;
     this.offNames  = -1;
     this.arch      = new X86ArchitectureReal(new ServiceContainer(), "x86-real-16");
 }
Esempio n. 9
0
        private void AssembleFragment(string asmSrc)
        {
            var arch = new X86ArchitectureReal(sc, "x86-real-16");

            program = asm.AssembleFragment(Address.SegPtr(0x0C00, 0), asmSrc);
            bmem    = (ByteMemoryArea)program.SegmentMap.Segments.Values.First().MemoryArea;
        }
Esempio n. 10
0
 public void Setup()
 {
     this.writer    = null;
     this.exeLoader = null;
     this.offNames  = -1;
     this.arch      = new X86ArchitectureReal(new ServiceContainer(), "x86-real-16", new Dictionary <string, object>());
 }
Esempio n. 11
0
        public void Dec_LoadCallSignatures()
        {
            var     arch    = new X86ArchitectureReal("x86-real-16");
            Program program = new Program {
                Architecture = arch,
                Platform     = new MsdosPlatform(sc, arch)
            };

            decompiler.Project = new Project
            {
                Programs = { program },
            };
            SerializedSignature sig = new SerializedSignature();

            sig.Arguments = new Argument_v1[] {
                new Argument_v1 {
                    Kind = new Register_v1("ds")
                },
                new Argument_v1 {
                    Kind = new Register_v1("bx"),
                }
            };
            var al = new List <SerializedCall_v1> {
                new SerializedCall_v1(Address.SegPtr(0x0C32, 0x3200), sig)
            };
            var sigs = decompiler.LoadCallSignatures(program, al);

            FunctionType ps = sigs[Address.SegPtr(0x0C32, 0x3200)];

            Assert.IsNotNull(ps, "Expected a call signature for address");
        }
Esempio n. 12
0
        public void Setup()
        {
            var sc = new ServiceContainer();

            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            var arch = new X86ArchitectureReal("x86-real-16");

            this.platform = new MsdosPlatform(sc, arch);
        }
Esempio n. 13
0
        protected Program RewriteCodeFragment(string s)
        {
            var        arch    = new X86ArchitectureReal("x86-real-16");
            IAssembler asm     = new X86TextAssembler(arch);
            var        program = asm.AssembleFragment(Address.SegPtr(0xC00, 0), s);

            program.Platform = new MsdosPlatform(null, arch);
            Rewrite(program, asm, (string)null);
            return(program);
        }
Esempio n. 14
0
        public void TestGrfWithOneBit()
        {
            IProcessorArchitecture arch = new X86ArchitectureReal();
            SignatureBuilder       sb   = new SignatureBuilder(null, arch);

            sb.AddFlagGroupReturnValue((uint)FlagM.CF, arch.CreateFrame());
            FunctionType sig = sb.BuildSignature();

            Assert.AreEqual("bool", sig.ReturnValue.DataType.ToString());
        }
Esempio n. 15
0
        protected Program RewriteCodeFragment(string s)
        {
            var        services = new ServiceContainer();
            var        arch     = new X86ArchitectureReal(services, "x86-real-16", new Dictionary <string, object>());
            IAssembler asm      = new X86TextAssembler(arch);
            var        program  = asm.AssembleFragment(Address.SegPtr(0xC00, 0), s);

            program.Platform = new MsdosPlatform(services, arch);
            Rewrite(program, asm, (string)null);
            return(program);
        }
Esempio n. 16
0
        public void TestGrfWithOneBit()
        {
            IProcessorArchitecture arch = new X86ArchitectureReal("x86-real-16");
            SignatureBuilder       sb   = new SignatureBuilder(null, arch);

            sb.AddFlagGroupReturnValue(
                new KeyValuePair <RegisterStorage, uint>(Registers.eflags, (uint)FlagM.CF),
                arch.CreateFrame());
            FunctionType sig = sb.BuildSignature();

            Assert.AreEqual("bool", sig.ReturnValue.DataType.ToString());
        }
Esempio n. 17
0
        public void FrGrfTest()
        {
            var arch = new X86ArchitectureReal(new ServiceContainer(), "x86-real-16", new Dictionary <string, object>());
            var f    = new Frame(PrimitiveType.Word16);

            f.EnsureFlagGroup(arch.GetFlagGroup("SZ"));
            using (FileUnitTester fut = new FileUnitTester("Core/FrGrfTest.txt"))
            {
                f.Write(fut.TextWriter);
                fut.AssertFilesEqual();
            }
        }
Esempio n. 18
0
        public void FrGrfTest()
        {
            var arch = new X86ArchitectureReal("x86-real-16");
            var f    = new Frame(PrimitiveType.Word16);

            f.EnsureFlagGroup(arch.GetFlagGroup("SZ"));
            using (FileUnitTester fut = new FileUnitTester("Core/FrGrfTest.txt"))
            {
                f.Write(fut.TextWriter);
                fut.AssertFilesEqual();
            }
        }
Esempio n. 19
0
        public void Setup()
        {
            sc = new ServiceContainer();

            form = new Mock <IMainForm>();

            var arch     = new X86ArchitectureReal(sc, "x86-real-16");
            var platform = new Mock <IPlatform>();

            platform.Setup(p => p.CreateMetadata()).Returns(new TypeLibrary());
            platform.Setup(p => p.Architecture).Returns(arch);
            program = new Program();
            program.Architecture = arch;
            program.Platform     = platform.Object;
            var mem = new ByteMemoryArea(Address.SegPtr(0xC00, 0), new byte[10000]);

            program.SegmentMap = new SegmentMap(
                mem.BaseAddress,
                new ImageSegment("0C00", mem, AccessMode.ReadWriteExecute));

            program.SegmentMap.AddOverlappingSegment("0C10", mem, Address.SegPtr(0x0C10, 0), AccessMode.ReadWrite);
            program.SegmentMap.AddOverlappingSegment("0C20", mem, Address.SegPtr(0x0C20, 0), AccessMode.ReadWrite);
            mapSegment1 = program.SegmentMap.Segments.Values[0];
            mapSegment2 = program.SegmentMap.Segments.Values[1];

            decSvc = new DecompilerService();

            sc.AddService <IDecompilerService>(decSvc);
            sc.AddService <IWorkerDialogService>(new FakeWorkerDialogService());
            sc.AddService <DecompilerEventListener>(new FakeDecompilerEventListener());
            sc.AddService <IStatusBarService>(new FakeStatusBarService());
            sc.AddService <IDecompiledFileService>(new FakeDecompiledFileService());
            uiSvc  = AddService <IDecompilerShellUiService>();
            memSvc = AddService <ILowLevelViewService>();

            var ldr = new Mock <ILoader>();

            ldr.Setup(l => l.LoadImageBytes("test.exe", 0)).Returns(new byte[400]);
            ldr.Setup(l => l.LoadExecutable(
                          It.IsNotNull <string>(),
                          It.IsNotNull <byte[]>(),
                          null,
                          It.IsAny <Address>())).Returns(program)
            .Callback(() =>
            {
                program.ToString();
            });
            decSvc.Decompiler = new Decompiler(ldr.Object, sc);
            decSvc.Decompiler.Load("test.exe");

            interactor = new ScannedPageInteractor(sc);
        }
Esempio n. 20
0
        public void SetUp()
        {
            var arch = new X86ArchitectureReal("x86-real-16");

            program = new Program()
            {
                Architecture = arch
            };
            sc = new ServiceContainer();
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            asm        = new X86TextAssembler(sc, arch);
            configFile = null;
        }
Esempio n. 21
0
		protected Program RewriteProgramMsdos(string sourceFilename, Address addrBase)
		{
            var sc = new ServiceContainer();
            sc.AddService<IConfigurationService>(new FakeDecompilerConfiguration());
            var ldr = new Loader(sc);
            var arch = new X86ArchitectureReal();

            program = ldr.AssembleExecutable(
                FileUnitTester.MapTestPath(sourceFilename),
                new X86TextAssembler(arch) { Platform = new MsdosPlatform(null, arch) },
                addrBase);
            return RewriteProgram();
		}
Esempio n. 22
0
        private void BuildX86RealTest(Action <X86Assembler> test)
        {
            var addr = Address.SegPtr(0x0C00, 0);
            var arch = new X86ArchitectureReal("x86-real-16");
            var m    = new X86Assembler(sc, new FakePlatform(null, arch), addr, new List <ImageSymbol>());

            test(m);
            this.program = m.GetImage();
            this.scan    = this.CreateScanner(this.program);
            var sym = ImageSymbol.Procedure(arch, addr);

            scan.EnqueueImageSymbol(sym, true);
        }
Esempio n. 23
0
        public void FrGrfTest()
        {
            IntelArchitecture arch = new X86ArchitectureReal();
            Frame             f    = new Frame(PrimitiveType.Word16);
            uint       iSz         = (uint)(FlagM.ZF | FlagM.SF);
            Identifier grfSz       = f.EnsureFlagGroup(Registers.eflags, iSz, arch.GrfToString(iSz), PrimitiveType.Byte);

            using (FileUnitTester fut = new FileUnitTester("Core/FrGrfTest.txt"))
            {
                f.Write(fut.TextWriter);
                fut.AssertFilesEqual();
            }
        }
Esempio n. 24
0
        public void SetUp()
        {
            sc = new ServiceContainer();
            sc.AddService <ITestGenerationService>(new UnitTestGenerationService(sc));
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            var arch = new X86ArchitectureReal(sc, "x86-real-16", new Dictionary <string, object>());

            program = new Program()
            {
                Architecture = arch
            };
            asm        = new X86TextAssembler(arch);
            configFile = null;
        }
Esempio n. 25
0
        public void X86St_Simple()
        {
            var arch = new X86ArchitectureReal("x86-real-16");

            X86State st = new X86State(arch);

            st.SetRegister(Registers.cs, Constant.Word16(0xC00));
            st.SetRegister(Registers.ax, Constant.Word16(0x1234));
            Assert.IsTrue(!st.GetRegister(Registers.bx).IsValid);
            Assert.IsTrue(st.GetRegister(Registers.ax).IsValid);
            Assert.IsTrue(st.GetRegister(Registers.al).IsValid);
            Assert.AreEqual(0x34, st.GetRegister(Registers.al).ToUInt32());
            Assert.IsTrue(st.GetRegister(Registers.ah).IsValid);
            Assert.AreEqual(0x12, st.GetRegister(Registers.ah).ToUInt32());
        }
Esempio n. 26
0
        public void X86St_Simple()
        {
            var arch = new X86ArchitectureReal(new ServiceContainer(), "x86-real-16", new Dictionary <string, object>());

            X86State st = new X86State(arch);

            st.SetRegister(Registers.cs, Constant.Word16(0xC00));
            st.SetRegister(Registers.ax, Constant.Word16(0x1234));
            Assert.IsTrue(!st.GetRegister(Registers.bx).IsValid);
            Assert.IsTrue(st.GetRegister(Registers.ax).IsValid);
            Assert.IsTrue(st.GetRegister(Registers.al).IsValid);
            Assert.AreEqual(0x34, st.GetRegister(Registers.al).ToUInt32());
            Assert.IsTrue(st.GetRegister(Registers.ah).IsValid);
            Assert.AreEqual(0x12, st.GetRegister(Registers.ah).ToUInt32());
        }
Esempio n. 27
0
        protected Program RewriteProgramMsdos(string sourceFilename, Address addrBase)
        {
            var sc = new ServiceContainer();

            sc.AddService <IConfigurationService>(new FakeDecompilerConfiguration());
            var ldr  = new Loader(sc);
            var arch = new X86ArchitectureReal();

            program = ldr.AssembleExecutable(
                FileUnitTester.MapTestPath(sourceFilename),
                new X86TextAssembler(arch)
            {
                Platform = new MsdosPlatform(null, arch)
            },
                addrBase);
            return(RewriteProgram());
        }
Esempio n. 28
0
        public void Scanner_CallGraphTree()
        {
            var arch = new X86ArchitectureReal(sc, "x86-real-16", new Dictionary <string, object>());

            program = new Program();
            program.Architecture = arch;
            var addr = Address.SegPtr(0xC00, 0);
            var m    = new X86Assembler(arch, addr, new List <ImageSymbol>());

            m.i86();

            m.Proc("main");
            m.Call("baz");
            m.Ret();
            m.Endp("main");

            m.Proc("foo");
            m.Ret();
            m.Endp("foo");

            m.Proc("bar");
            m.Ret();
            m.Endp("bar");

            m.Proc("baz");
            m.Call("foo");
            m.Call("bar");
            m.Jmp("foo");
            m.Endp("baz");

            program          = m.GetImage();
            program.Platform = new FakePlatform(null, arch);
            Given_Project();

            var scan = new Scanner(
                program,
                project.LoadedMetadata,
                new DynamicLinker(project, program, eventListener),
                sc);
            var sym = ImageSymbol.Procedure(arch, addr);

            scan.EnqueueImageSymbol(sym, true);
            scan.ScanImage();

            Assert.AreEqual(4, program.Procedures.Count);
        }
Esempio n. 29
0
        public void PsigArguments()
        {
            using (FileUnitTester fut = new FileUnitTester("Core/PsigArguments.txt"))
            {
                IntelArchitecture arch = new X86ArchitectureReal("x86-real-16");
                uint       f           = (uint)(FlagM.CF | FlagM.ZF);
                Identifier argF        = new Identifier(arch.GrfToString(f), PrimitiveType.Bool, new FlagGroupStorage(Registers.eflags, f, "CZ", PrimitiveType.Byte));
                Identifier argR        = new Identifier(Registers.ax.Name, Registers.ax.DataType, Registers.ax);

                argF.Write(true, fut.TextWriter);
                fut.TextWriter.WriteLine();
                argR.Write(true, fut.TextWriter);
                fut.TextWriter.WriteLine();

                fut.AssertFilesEqual();
            }
        }
		private Program AssembleFile(string sourceFile, Address addr)
		{
            var ldr = new Loader(new ServiceContainer());
            var arch = new X86ArchitectureReal();
            Program program = ldr.AssembleExecutable(
                 FileUnitTester.MapTestPath(sourceFile),
                 new X86TextAssembler(arch),
                addr);
            var project = new Project { Programs = { program } };
			var scan = new Scanner(program, new Dictionary<Address, ProcedureSignature>(), new ImportResolver(project), null);
			foreach (EntryPoint ep in program.EntryPoints)
			{
				scan.EnqueueEntryPoint(ep);
			}
			scan.ScanImage();
			return program;
		}
Esempio n. 31
0
        public void Scanner_CallGraphTree()
        {
            var arch = new X86ArchitectureReal("x86-real-16");

            program = new Program();
            program.Architecture = arch;
            var addr = Address.SegPtr(0xC00, 0);
            var m    = new X86Assembler(sc, new DefaultPlatform(sc, arch), addr, new List <ImageSymbol>());

            m.i86();

            m.Proc("main");
            m.Call("baz");
            m.Ret();
            m.Endp("main");

            m.Proc("foo");
            m.Ret();
            m.Endp("foo");

            m.Proc("bar");
            m.Ret();
            m.Endp("bar");

            m.Proc("baz");
            m.Call("foo");
            m.Call("bar");
            m.Jmp("foo");
            m.Endp("baz");

            program          = m.GetImage();
            program.Platform = new FakePlatform(null, arch);
            Given_Project();

            var scan = new Scanner(
                program,
                new ImportResolver(project, program, eventListener),
                sc);
            var sym = ImageSymbol.Procedure(arch, addr);

            scan.EnqueueImageSymbol(sym, true);
            scan.ScanImage();

            Assert.AreEqual(4, program.Procedures.Count);
        }
Esempio n. 32
0
        public void SequenceTest()
        {
            IntelArchitecture arch = new X86ArchitectureReal();
            Frame             f    = new Frame(PrimitiveType.Word16);
            Identifier        ax   = f.EnsureRegister(Registers.ax);
            Identifier        dx   = f.EnsureRegister(Registers.dx);
            Identifier        dxax = f.EnsureSequence(dx.Storage, ax.Storage, PrimitiveType.Word32);

            using (FileUnitTester fut = new FileUnitTester("Core/SequenceTest.txt"))
            {
                f.Write(fut.TextWriter);
                fut.AssertFilesEqual();
            }

            Identifier dxax2 = f.EnsureSequence(dx.Storage, ax.Storage, PrimitiveType.Word32);

            Assert.IsTrue(dxax2 == dxax);
        }