protected void Given_NoImportedProcedures() { host.Stub(h => h.GetImportedProcedure(null, null)) .IgnoreArguments() .Return(null); host.Stub(h => h.GetImport(null, null)) .IgnoreArguments() .Return(null); }
public void SparcRw_mulscc() { host.Stub(h => h.EnsurePseudoProcedure("__mulscc", PrimitiveType.Int32, 2)) .Return(new PseudoProcedure("__mulscc", PrimitiveType.Int32, 2)); BuildTest(0x8B204009); // mulscc %g1,%o1,%g5 AssertCode( "0|00100000(4): 2 instructions", "1|L--|g5 = __mulscc(g1, o1)", "2|L--|NZVC = cond(g5)"); }
public void Siq_Terminate() { Given_x86_Image(m => { m.Hlt(); m.Mov(m.eax, 0); m.Ret(); }); CreateScanner(); host.Stub(h => h.PseudoProcedure( Arg <string> .Is.Equal("__hlt"), Arg <ProcedureCharacteristics> .Is.NotNull, Arg <DataType> .Is.NotNull, Arg <Expression> .Is.Anything)). Return(new Application( new ProcedureConstant( new UnknownType(), new PseudoProcedure("__hlt", VoidType.Instance, 0)), VoidType.Instance)); mr.ReplayAll(); siq.ScanInstructions(sr); var blocks = siq.BuildBasicBlocks(sr); blocks = siq.RemoveInvalidBlocks(sr, blocks); var from = blocks.Values.Single(n => n.id == Address.Ptr32(0x00100000)); var to = blocks.Values.Single(n => n.id == Address.Ptr32(0x00100001)); Assert.IsFalse(sr.FlatEdges.Any(e => e.first == from.id && e.second == to.id)); }
protected void Given_RewriterHost() { host = mr.Stub<IRewriterHost>(); host.Stub(h => h.EnsurePseudoProcedure(null, null, 0)) .IgnoreArguments() .Do(new Func<string, DataType, int, PseudoProcedure>((n, dt, a) => { return new PseudoProcedure(n, dt, a); })); }
protected void Given_RewriterHost() { host = mr.Stub <IRewriterHost>(); host.Stub(h => h.EnsurePseudoProcedure(null, null, 0)) .IgnoreArguments() .Do(new Func <string, DataType, int, PseudoProcedure>((n, dt, a) => { return(new PseudoProcedure(n, dt, a)); })); }
public void SparcRw_mulscc() { host.Stub(h => h.PseudoProcedure( Arg <string> .Is.Equal("__mulscc"), Arg <DataType> .Is.Equal(VoidType.Instance), Arg <Expression[]> .Is.NotNull)) .Return(new Application( new ProcedureConstant( PrimitiveType.Ptr32, new PseudoProcedure("__mulscc", PrimitiveType.Int32, 2)), VoidType.Instance, Constant.Word32(0x19))); BuildTest(0x8B204009); // mulscc %g1,%o1,%g5 AssertCode( "0|L--|00100000(4): 2 instructions", "1|L--|g5 = __mulscc(g1, o1)", "2|L--|NZVC = cond(g5)"); }
protected void Given_RewriterHost() { host = mr.Stub <IRewriterHost>(); host.Stub(h => h.EnsurePseudoProcedure(null, null, 0)) .IgnoreArguments() .Do(new Func <string, DataType, int, PseudoProcedure>((n, dt, a) => { return(new PseudoProcedure(n, dt, a)); })); host.Stub(h => h.PseudoProcedure( Arg <string> .Is.Anything, Arg <DataType> .Is.Anything, Arg <Expression[]> .Is.Anything)) .Do(new Func <string, DataType, Expression[], Expression>((n, dt, a) => { var fn = new FunctionType(); var ppp = new PseudoProcedure(n, fn); return(new Application(new ProcedureConstant(fn, ppp), dt, a)); })); }
private void Given_Scanner() { this.host = mr.Stub <IRewriterHost>(); var dev = mr.Stub <DecompilerEventListener>(); //host.Stub(h => h.EnsurePseudoProcedure(null, null, 0)) // .IgnoreArguments() // .Return(new PseudoProcedure("<>", PrimitiveType.Word32, 2)); host.Stub(h => h.PseudoProcedure("", VoidType.Instance, null)).IgnoreArguments().Return(null); host.Stub(h => h.GetImport(null, null)).IgnoreArguments().Return(null); host.Stub(h => h.GetImportedProcedure(null, null, null)).IgnoreArguments().Return(null); host.Replay(); dev.Replay(); var frame = program.Architecture.CreateFrame(); this.sr = new ScanResults { Instructions = new SortedList <Address, RtlInstructionCluster>(), KnownProcedures = new HashSet <Address>(), }; this.sh = new ShingledScanner(program, host, frame, sr, dev); }