Пример #1
0
        public Mock <IPlatform> CreateMockPlatform()
        {
            if (this.mockPlatform != null)
            {
                return(this.mockPlatform);
            }

            var mockPlatform = new Mock <IPlatform>();

            mockPlatform.Setup(p => p.Name).Returns("TestPlatform");
            mockPlatform.Setup(p => p.PointerType).Returns(PrimitiveType.Ptr32);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Char)).Returns(8);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Short)).Returns(16);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Int)).Returns(32);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Long)).Returns(32);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.LongLong)).Returns(64);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Float)).Returns(32);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Double)).Returns(64);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.LongDouble)).Returns(64);
            mockPlatform.Setup(p => p.GetBitSizeFromCBasicType(CBasicType.Int64)).Returns(64);
            mockPlatform.Setup(p => p.CreateMetadata()).Returns(() => this.platformMetadata.Clone());
            var arch = new X86ArchitectureFlat32(new ServiceContainer(), "x86-protected-32", new Dictionary <string, object>());

            mockPlatform.Setup(p => p.Architecture).Returns(arch);
            mockPlatform.Setup(p => p.DefaultCallingConvention).Returns("__cdecl");
            var ccStdcall = new X86CallingConvention(4, 4, 4, false, false);
            var ccCdecl   = new X86CallingConvention(4, 4, 4, true, false);

            mockPlatform.Setup(p => p.GetCallingConvention(null)).Returns(ccCdecl);
            mockPlatform.Setup(p => p.GetCallingConvention("__stdcall")).Returns(ccStdcall);
            mockPlatform.Setup(p => p.SaveUserOptions()).Returns((Dictionary <string, object>)null);
            this.mockPlatform = mockPlatform;
            return(mockPlatform);
        }
Пример #2
0
        private void Given_16bit_CallingConvention(string cConvention)
        {
            this.ccr          = new CallingConventionEmitter();
            this.deserializer = new FakeTypeDeserializer(32);
            X86CallingConvention cc;

            switch (cConvention)
            {
            case "__cdecl":
                cc = new X86CallingConvention(4, 2, 4, true, false);
                break;

            case "stdapi":
            case "stdcall":
            case "__stdcall":
                cc = new X86CallingConvention(4, 2, 4, false, false);
                break;

            case "pascal":
                cc = new X86CallingConvention(4, 2, 4, false, true);
                break;

            default: throw new NotImplementedException(cConvention + " not supported.");
            }
            this.cc = cc;
        }
Пример #3
0
        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.Ptr32);
            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("x86-protected-32");

            platform.Stub(p => p.Architecture).Return(arch);
            platform.Stub(p => p.DefaultCallingConvention).Return("__cdecl");
            var ccStdcall = new X86CallingConvention(4, 4, 4, false, false);
            var ccCdecl   = new X86CallingConvention(4, 4, 4, true, false);

            platform.Stub(p => p.GetCallingConvention(null)).Return(ccCdecl);
            platform.Stub(p => p.GetCallingConvention("__stdcall")).Return(ccStdcall);
            platform.Stub(p => p.SaveUserOptions()).Return(null);

            platform.Replay();
            return(platform);
        }
Пример #4
0
        public void Vafs_ReplaceArgs()
        {
            var platform = new Mock <IPlatform>();
            var cc       = new X86CallingConvention(4, 4, 4, false, false);

            platform.Setup(p => p.GetCallingConvention("")).Returns(cc);

            var newSig = VarargsFormatScanner.ReplaceVarargs(
                platform.Object,
                x86PrintfSig,
                new DataType[] { PrimitiveType.Int16, new Pointer(PrimitiveType.Char, 32) });

            System.Diagnostics.Debug.Print("{0}", DumpSignature("test", newSig));
            Assert.AreEqual(
                "void test(Stack +0004 (ptr32 char), Stack +0008 int16, Stack +000C (ptr32 char))",
                DumpSignature("test", newSig));
        }