public CreateRewriter ( Reko.Core.ImageReader rdr, |
||
rdr | Reko.Core.ImageReader | |
state | ||
frame | ||
host | IRewriterHost | |
return | IEnumerable |
private void BuildTest(IntelArchitecture arch, Address addr, IPlatform platform, Action<X86Assembler> m) { proc = new Procedure("test", arch.CreateFrame()); block = proc.AddBlock("testblock"); this.state = arch.CreateProcessorState(); var asm = new X86Assembler(sc, new DefaultPlatform(sc, arch), addr, new List<ImageSymbol>()); scanner = mr.StrictMock<IScanner>(); scanner.Stub(s => s.Services).Return(sc); m(asm); lr = asm.GetImage(); host = new RewriterHost( asm.ImportReferences, new Dictionary<string, FunctionType> { { "GetDC", new FunctionType( new Identifier("", new Pointer(VoidType.Instance, 4), new RegisterStorage("eax", 0, 0, PrimitiveType.Word32)), new [] { new Identifier("arg", new TypeReference( "HWND", new Pointer(VoidType.Instance, 4)), new StackArgumentStorage(4, new TypeReference( "HWND", new Pointer(VoidType.Instance, 4)))) }) { StackDelta = 4, } } }, new Dictionary<string, DataType>()); var rw = arch.CreateRewriter( lr.SegmentMap.Segments.Values.First().MemoryArea.CreateLeReader(addr), this.state, proc.Frame, host); this.program = new Program { Architecture = arch, SegmentMap = lr.SegmentMap, ImageMap = lr.ImageMap, Platform = platform, }; using (mr.Record()) { scanner.Stub(x => x.FindContainingBlock(Arg<Address>.Is.Anything)).Return(block); scanner.Stub(x => x.GetTrace(null, null, null)).IgnoreArguments().Return(rw); scanner.Stub(x => x.Services).Return(sc); } wi = new BlockWorkitem(scanner, program, state, addr); }
private void BuildTest(IntelArchitecture arch, Address addr, IPlatform platform, Action<X86Assembler> m) { this.arch = new IntelArchitecture(ProcessorMode.Protected32); proc = new Procedure("test", arch.CreateFrame()); block = proc.AddBlock("testblock"); this.state = arch.CreateProcessorState(); var asm = new X86Assembler(sc, new DefaultPlatform(sc, arch), addr, new List<EntryPoint>()); scanner = mr.StrictMock<IScanner>(); m(asm); lr = asm.GetImage(); host = new RewriterHost(asm.ImportReferences, new Dictionary<string, ProcedureSignature> { { "GetDC", new ProcedureSignature( new Identifier("", new Pointer(VoidType.Instance, 4), new RegisterStorage("eax", 0, 0, PrimitiveType.Word32)), new Identifier("arg", new TypeReference( "HWND", new Pointer(VoidType.Instance, 4)), new StackArgumentStorage(0, new TypeReference( "HWND", new Pointer(VoidType.Instance, 4))))) { StackDelta = 4, } } }); var rw = arch.CreateRewriter(lr.Image.CreateLeReader(addr), this.state, proc.Frame, host); var prog = new Program { Architecture = arch, Image = lr.Image, ImageMap = lr.ImageMap, Platform = platform, }; using (mr.Record()) { scanner.Stub(x => x.FindContainingBlock(Arg<Address>.Is.Anything)).Return(block); scanner.Stub(x => x.GetTrace(null, null, null)).IgnoreArguments().Return(rw); } wi = new BlockWorkitem(scanner, prog, state, addr); }