public void RegisterTest() { Frame f = new Frame(PrimitiveType.Word16); Identifier id0 = f.EnsureRegister(Registers.ax); Identifier id1 = f.EnsureRegister(Registers.bx); Identifier id2 = f.EnsureRegister(Registers.ax); Assert.AreEqual(id0, id2); }
public ApplicationBuilderTests() { arch = new IntelArchitecture(ProcessorMode.Protected32); frame = arch.CreateFrame(); ret = frame.EnsureRegister(Registers.eax); arg04 = new Identifier("arg04", PrimitiveType.Word32, new StackArgumentStorage(4, PrimitiveType.Word32)); arg08 = new Identifier("arg08", PrimitiveType.Word16, new StackArgumentStorage(8, PrimitiveType.Word16)); arg0C = new Identifier("arg0C", PrimitiveType.Byte, new StackArgumentStorage(0x0C, PrimitiveType.Byte)); regOut = new Identifier("edxOut", PrimitiveType.Word32, new OutArgumentStorage(frame.EnsureRegister(Registers.edx))); sig = new ProcedureSignature(ret, new Identifier[] { arg04, arg08, arg0C, regOut }) { }; }
public void SequenceTest() { IntelArchitecture arch = new IntelArchitecture(ProcessorMode.Real); Frame f = new Frame(PrimitiveType.Word16); Identifier ax = f.EnsureRegister(Registers.ax); Identifier dx = f.EnsureRegister(Registers.dx); Identifier dxax = f.EnsureSequence(dx, ax, PrimitiveType.Word32); using (FileUnitTester fut = new FileUnitTester("Core/SequenceTest.txt")) { f.Write(fut.TextWriter); fut.AssertFilesEqual(); } Identifier dxax2 = f.EnsureSequence(dx,ax, PrimitiveType.Word32); Assert.IsTrue(dxax2 == dxax); }
public virtual Expression CreateStackAccess(Frame frame, int offset, DataType dataType) { var sp = frame.EnsureRegister(Registers.sp); var ss = frame.EnsureRegister(Registers.ss); return SegmentedAccess.Create(ss, sp, offset, dataType); }
public override Expression CreateStackAccess(Frame frame, int offset, DataType dataType) { var rsp = frame.EnsureRegister(Registers.rsp); return MemoryAccess.Create(rsp, offset, dataType); }
public void Setup() { m = new ProcedureBuilder(arch); frame = m.Frame; ax = frame.EnsureRegister(new RegisterStorage("ax", 0, PrimitiveType.Word16)); bx = frame.EnsureRegister(new RegisterStorage("bx", 3, PrimitiveType.Word16)); cx = frame.EnsureRegister(new RegisterStorage("cx", 1, PrimitiveType.Word16)); dx = frame.EnsureRegister(new RegisterStorage("dx", 2, PrimitiveType.Word16)); SCZ = frame.EnsureFlagGroup(7, "SCZ", PrimitiveType.Byte); CF = frame.EnsureFlagGroup(arch.CarryFlagMask, "C", PrimitiveType.Bool); rw = new LongAddRewriter(m.Procedure, arch); Procedure proc = new Procedure("test", frame); block = new Block(proc, "bloke"); }
public void EnsureOutRegister() { Frame f = new Frame(PrimitiveType.Word32); Identifier r = f.EnsureRegister(new Mocks.MockMachineRegister("r1", 1, PrimitiveType.Word32)); Identifier arg = f.EnsureOutArgument(r, PrimitiveType.Pointer32); Assert.AreEqual("r1Out", arg.Name); Assert.AreSame(PrimitiveType.Pointer32, arg.DataType); }
public void FrEnsureRegister() { Frame f = new Frame(PrimitiveType.Word32); f.EnsureRegister(new Mocks.MockMachineRegister("eax", 0, PrimitiveType.Word32)); Assert.AreEqual("eax", f.Identifiers[2].Name); Assert.AreSame(PrimitiveType.Word32, f.Identifiers[2].DataType); }
public void FrBindMixedParameters() { Frame f = new Frame(PrimitiveType.Word16); Identifier ax = f.EnsureRegister(Registers.ax); Identifier cx = f.EnsureRegister(Registers.cx); int stack = PrimitiveType.Word16.Size; Identifier arg1 = f.EnsureStackLocal(-stack, PrimitiveType.Word16); ProcedureSignature sig = new ProcedureSignature( ax, cx, new Identifier("arg0", PrimitiveType.Word16, new StackArgumentStorage(0, PrimitiveType.Word16))); var cs = new CallSite(stack, 0); ProcedureConstant fn = new ProcedureConstant(PrimitiveType.Pointer32, new PseudoProcedure("bar", sig)); ApplicationBuilder ab = new ApplicationBuilder(arch, f, cs, fn, sig, true); Instruction instr = ab.CreateInstruction(); using (FileUnitTester fut = new FileUnitTester("Core/FrBindMixedParameters.txt")) { f.Write(fut.TextWriter); fut.TextWriter.WriteLine(instr.ToString()); fut.AssertFilesEqual(); } }
public void FrSequenceAccess() { Frame f = new Frame(PrimitiveType.Word16); Identifier ax = f.EnsureRegister(Registers.ax); Identifier dx = f.EnsureRegister(Registers.dx); Identifier dx_ax = f.EnsureSequence(dx, ax, PrimitiveType.Word32); SequenceStorage vDx_ax = (SequenceStorage) dx_ax.Storage; using (FileUnitTester fut = new FileUnitTester("Core/FrSequenceAccess.txt")) { f.Write(fut.TextWriter); fut.TextWriter.WriteLine("Head({0}) = {1}", dx_ax.Name, vDx_ax.Head.Name); fut.TextWriter.WriteLine("Tail({0}) = {1}", dx_ax.Name, vDx_ax.Tail.Name); fut.AssertFilesEqual(); } }
public Expression CreateStackAccess(Frame frame, int cbOffset, DataType dataType) { return new MemoryAccess(new BinaryExpression( Operator.IAdd, FramePointerType, frame.EnsureRegister(StackRegister), Constant.Word32(cbOffset)), dataType); }