public void Setup() { this.sc = new ServiceContainer(); this.x86 = new X86ArchitectureFlat32(); this.ppc = new PowerPcArchitecture32(); this.m = new ProcedureBuilder(); this.printfChr = new ProcedureCharacteristics() { VarargsParserClass = "Reko.Libraries.Libc.PrintfFormatParser,Reko.Libraries.Libc" }; this.x86PrintfSig = new FunctionType( null, StackId(null, 4, CStringType()), StackId("...", 8, new UnknownType())); this.x86SprintfSig = new FunctionType( null, StackId(null, 4, CStringType()), StackId(null, 8, CStringType()), StackId("...", 12, new UnknownType())); this.ppcPrintfSig = new FunctionType( null, RegId(null, ppc, "r3", CStringType()), RegId("...", ppc, "r4", new UnknownType())); this.addrInstr = Address.Ptr32(0x123400); }
public void Setup() { arch = new X86ArchitectureFlat32(); var services = new ServiceContainer(); services.AddService<IFileSystemService>(new FileSystemServiceImpl()); asm = new X86Assembler(services, new DefaultPlatform(services, arch), loadAddress, new List<ImageSymbol>()); }
public void Setup() { var arch = new X86ArchitectureFlat32(); f = arch.CreateFrame(); liveness = new IdentifierLiveness(arch); isLiveHelper = new RegisterLiveness.IsLiveHelper(arch); }
private void btnLoad_Click(object sender, EventArgs e) { var image = new LoadedImage(Address.Ptr32(0x12312300),new byte[0x1000]); var imageMap = image.CreateImageMap(); var arch = new X86ArchitectureFlat32(); var program = new Core.Program(image, imageMap, arch, new DefaultPlatform(null, arch)); var project = new Project { Programs = { program } }; pbs.Load(project); }
public void X86St_OnBeforeCall_DecrementStackRegister() { var arch = new X86ArchitectureFlat32(); var state = new X86State(arch); var esp = CreateId(Registers.esp); state.SetRegister(Registers.esp, Constant.Word32(-4)); state.OnProcedureEntered(); var site = state.OnBeforeCall(esp, 4); Assert.AreEqual(4, site.SizeOfReturnAddressOnStack); Assert.AreEqual("0xFFFFFFFC", state.GetValue(esp).ToString()); }
private void btnLoad_Click(object sender, EventArgs e) { var mem = new MemoryArea(Address.Ptr32(0x12312300),new byte[0x1000]); var imageMap = new SegmentMap( mem.BaseAddress, new ImageSegment("code", mem, AccessMode.ReadWriteExecute)); var arch = new X86ArchitectureFlat32(); var program = new Core.Program(imageMap, arch, new DefaultPlatform(null, arch)); var project = new Project { Programs = { program } }; pbs.Load(project); }
public void Setup() { proc = new Procedure_v1(); var arch = new X86ArchitectureFlat32(); var platform = new Win32Platform(null, arch); var program = new Program { Architecture = arch, Platform = platform }; interactor = new ProcedureDialogInteractor(program, proc); }
protected Program RewriteProgram32(string sourceFilename, Address addrBase) { var sc = new ServiceContainer(); sc.AddService<IConfigurationService>(new FakeDecompilerConfiguration()); var ldr = new Loader(sc); var arch = new X86ArchitectureFlat32(); program = ldr.AssembleExecutable( FileUnitTester.MapTestPath(sourceFilename), new X86TextAssembler(arch) { Platform = new DefaultPlatform(null, arch) }, addrBase); return RewriteProgram(); }
public void SlLookupType() { var slib = new SerializedLibrary { Types = new SerializedType[] { new SerializedTypedef { Name="int", DataType=new PrimitiveType_v1 { Domain = Reko.Core.Types.Domain.SignedInt, ByteSize = 4 } } } }; var arch = new X86ArchitectureFlat32(); var platform = new SysVPlatform(null, arch); var tldser = new TypeLibraryDeserializer(platform, true, new TypeLibrary()); var lib = tldser.Load(slib); Assert.AreEqual(PrimitiveType.Int32, lib.LookupType("int")); }
public void EP_TestCondition() { var p = new ProgramBuilder(); p.Add("main", (m) => { m.Label("foo"); m.BranchCc(ConditionCode.EQ, "foo"); m.Return(); }); var proc = p.BuildProgram().Procedures.Values.First(); var arch = new X86ArchitectureFlat32(); var ctx = new SymbolicEvaluationContext(arch, proc.Frame); var simplifier = new ExpressionSimplifier(ctx); var ep = new ExpressionPropagator(null, simplifier, ctx, new ProgramDataFlow()); var newInstr = proc.EntryBlock.Succ[0].Statements[0].Instruction.Accept(ep); Assert.AreEqual("branch Test(EQ,Z) foo", newInstr.ToString()); }
public void EP_ConditionOf() { var p = new ProgramBuilder(); var proc = p.Add("main", (m) => { var szo = m.Frame.EnsureFlagGroup(Registers.eflags, 0x7, "SZO", PrimitiveType.Byte); var ebx = m.Frame.EnsureRegister(new RegisterStorage("ebx", 3, 0, PrimitiveType.Word32)); var v4 = m.Frame.CreateTemporary(PrimitiveType.Word16); m.Assign(v4, m.IAdd(m.LoadW(ebx), 1)); m.Store(ebx, v4); m.Assign(szo, m.Cond(v4)); m.Return(); }); var arch = new X86ArchitectureFlat32(); var platform = new FakePlatform(null, arch); var ctx = new SymbolicEvaluationContext(arch, proc.Frame); var simplifier = new ExpressionSimplifier(ctx); var ep = new ExpressionPropagator(platform, simplifier, ctx, new ProgramDataFlow()); var newInstr = proc.EntryBlock.Succ[0].Statements[2].Instruction.Accept(ep); Assert.AreEqual("SZO = cond(v4)", newInstr.ToString()); }
private void RunFileTestx86_32(string relativePath, string outputFile) { Program program; var sc = new ServiceContainer(); var fsSvc = new FileSystemServiceImpl(); var el = new FakeDecompilerEventListener(); sc.AddService<IFileSystemService>(fsSvc); sc.AddService<DecompilerEventListener>(el); var arch = new X86ArchitectureFlat32(); var asm = new X86TextAssembler(sc, arch); using (var rdr = new StreamReader(FileUnitTester.MapTestPath(relativePath))) { var platform = new DefaultPlatform(sc, arch); asm.Platform = platform; program = asm.Assemble(Address.Ptr32(0x10000000), rdr); } var scanner = new Scanner(program, new Dictionary<Address, ProcedureSignature>(), null, sc); scanner.EnqueueEntryPoint(new EntryPoint(program.Image.BaseAddress, arch.CreateProcessorState())); scanner.ScanImage(); using (var fut = new FileUnitTester(outputFile)) { foreach (var proc in program.Procedures.Values) { proc.Write(false, fut.TextWriter); } fut.AssertFilesEqual(); } }
public void Dfa2_UserDefinedStackArgs() { var arch = new X86ArchitectureFlat32(); var pb = new ProgramBuilder(arch); var test = pb.Add( new Procedure_v1 { CSignature = "void test(int a, int b)" }, m => { var sp = m.Register(m.Architecture.StackRegister); var r1 = m.Reg32("r1", 1); var r2 = m.Reg32("r2", 2); var fp = m.Frame.FramePointer; m.Assign(r1, m.LoadDw(m.IAdd(fp, 4))); m.Assign(r2, m.LoadDw(m.IAdd(fp, 8))); m.Assign(r1, m.IAdd(r1, r2)); m.Store(m.Word32(0x010008), r1); m.Return(); }); var program = pb.BuildProgram(); var platform = new FakePlatform(null, arch); platform.Test_CreateProcedureSerializer = (t, d) => { var typeLoader = new TypeLibraryDeserializer(platform, false, new TypeLibrary()); return new X86ProcedureSerializer((IntelArchitecture)program.Architecture, typeLoader, ""); }; program.Platform = platform; var dfa = new DataFlowAnalysis(program, new FakeDecompilerEventListener()); dfa.AnalyzeProgram2(); var sExp = @"// test // Return size: 4 void test(int32 a, int32 b) test_entry: // succ: l1 l1: word32 r1_4 = a + b Mem5[0x00010008:word32] = r1_4 return // succ: test_exit test_exit: "; AssertProgram(sExp, pb.Program); }
public IPlatform CreatePlatform() { if (platform != null) return platform; platform = mr.Stub<IPlatform>(); platform.Stub(p => p.Name).Return("TestPlatform"); platform.Stub(p => p.PointerType).Return(PrimitiveType.Pointer32); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Char)).Return(1); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Short)).Return(2); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Int)).Return(4); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Long)).Return(4); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.LongLong)).Return(8); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Float)).Return(4); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Double)).Return(8); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.LongDouble)).Return(8); platform.Stub(p => p.GetByteSizeFromCBasicType(CBasicType.Int64)).Return(8); platform.Stub(p => p.CreateMetadata()).Do(new Func<TypeLibrary>(() => this.platformMetadata.Clone())); var arch = new X86ArchitectureFlat32(); platform.Stub(p => p.Architecture).Return(arch); platform.Stub(p => p.DefaultCallingConvention).Return("__cdecl"); platform.Stub(s => s.CreateProcedureSerializer(null, null)).IgnoreArguments().Do( new Func<ISerializedTypeVisitor<DataType>, string, ProcedureSerializer>((tlDeser, dc) => new X86ProcedureSerializer(arch, tlDeser, dc) ) ); platform.Stub(p => p.SaveUserOptions()).Return(null); platform.Replay(); return platform; }
public void Setup() { arch = new X86ArchitectureFlat32(); asm = new X86Assembler(arch, loadAddress, new List<EntryPoint>()); }
private void BuildTest32(Action<X86Assembler> m) { var arch = new X86ArchitectureFlat32(); BuildTest(arch, Address.Ptr32(0x10000), new FakePlatform(sc, arch), m); }
private void Given_Program(Address address, byte[] bytes) { var mem = new MemoryArea(address, bytes); var segmentMap = new SegmentMap( mem.BaseAddress, new ImageSegment("proggie", mem, AccessMode.ReadExecute)); var arch = new X86ArchitectureFlat32(); var platform = new FakePlatform(null, arch); this.program = new Program { Architecture = arch, SegmentMap = segmentMap, Platform = platform }; platform.Test_CreateProcedureSerializer = (t, d) => { var typeLoader = new TypeLibraryDeserializer(platform, false, new TypeLibrary()); return new X86ProcedureSerializer((IntelArchitecture)program.Architecture, typeLoader, ""); }; }
public void Setup() { mr = new MockRepository(); mockFactory = new MockFactory(mr); arch = new X86ArchitectureFlat32(); }