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()); }
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); }
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); }
public void Setup() { var arch = new X86ArchitectureReal(); proc = Procedure.Create("foo", Address.Ptr32(0x100), arch.CreateFrame()); alias = new Aliases(proc, arch); }
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()); }
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); }
public void Setup() { this.writer = null; this.exeLoader = null; this.offNames = -1; this.arch = new X86ArchitectureReal("x86-real-16"); }
public void Setup() { this.writer = null; this.exeLoader = null; this.offNames = -1; this.arch = new X86ArchitectureReal(new ServiceContainer(), "x86-real-16"); }
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; }
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>()); }
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"); }
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); }
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); }
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()); }
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); }
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()); }
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(); } }
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(); } }
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); }
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; }
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(); }
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); }
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(); } }
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; }
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()); }
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()); }
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()); }
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); }
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; }
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); }
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); }