public void Tlldr_LoadGlobalByOrdinal()
        {
            var typelib = new TypeLibrary();

            platform = mr.Stub <IPlatform>();
            platform.Stub(p => p.DefaultCallingConvention).Return("__cdecl");
            platform.Stub(p => p.Architecture).Return(new FakeArchitecture());
            platform.Replay();
            var tlldr = new TypeLibraryDeserializer(platform, true, typelib);

            tlldr.Load(new SerializedLibrary
            {
                ModuleName = "stdlib",
                Globals    = new List <GlobalVariable_v1>
                {
                    new GlobalVariable_v1
                    {
                        Name    = "errno",
                        Ordinal = 42,
                        Type    = PrimitiveType_v1.Int32(),
                    }
                }
            });
            var stdlib          = typelib.Modules["stdlib"];
            var globalByName    = stdlib.GlobalsByName["errno"];
            var globalByOrdinal = stdlib.GlobalsByOrdinal[42];

            Assert.AreSame(globalByName, globalByOrdinal);
        }
 private void Given_ArchitectureStub()
 {
     arch     = mr.DynamicMock <IProcessorArchitecture>();
     platform = mr.DynamicMock <IPlatform>();
     platform.Stub(p => p.PointerType).Return(PrimitiveType.Pointer32);
     this.procSer = mr.StrictMock <ProcedureSerializer>(null, null, null);
     platform.Stub(p => p.CreateProcedureSerializer(null, null)).IgnoreArguments().Return(procSer);
     platform.Stub(p => p.Architecture).Return(arch);
 }
 private void Given_ArchitectureStub()
 {
     arch = mr.DynamicMock<IProcessorArchitecture>();
     platform = mr.DynamicMock<IPlatform>();
     platform.Stub(p => p.PointerType).Return(PrimitiveType.Pointer32);
     this.procSer = mr.StrictMock<ProcedureSerializer>(null, null, null);
     platform.Stub(p => p.CreateProcedureSerializer(null, null)).IgnoreArguments().Return(procSer);
     platform.Stub(p => p.Architecture).Return(arch);
 }
 private void Given_ArchitectureStub()
 {
     arch = mr.DynamicMock <IProcessorArchitecture>();
     arch.Stub(a => a.PointerType).Return(PrimitiveType.Ptr32);
     arch.Stub(a => a.WordWidth).Return(PrimitiveType.Ptr32);
     platform = mr.DynamicMock <IPlatform>();
     platform.Stub(p => p.PointerType).Return(PrimitiveType.Ptr32);
     platform.Stub(p => p.Architecture).Return(arch);
     platform.Replay();
     this.procSer = new ProcedureSerializer(platform, null, "");
 }
示例#5
0
 private void Given_Platform()
 {
     platform = mr.Stub <IPlatform>();
     platform.Stub(p => p.LookupProcedureByName("", "")).IgnoreArguments()
     .Return(new ExternalProcedure("", new FunctionType()));
     platform.Replay();
 }
示例#6
0
        public void Impres_VtblFromMsMangledName()
        {
            var proj   = new Project();
            var impres = new ImportResolver(proj, program, new FakeDecompilerEventListener());

            platform.Stub(p => p.ResolveImportByName(null, null)).
            IgnoreArguments().Return(null);
            SerializedType nullType = null;

            platform.Stub(p => p.DataTypeFromImportName("??_7Scope@@6B@")).
            Return(Tuple.Create("`vftable'", nullType, nullType));

            var id = impres.ResolveImport("foo", "??_7Scope@@6B@", platform);

            Assert.AreEqual("`vftable'", id.ToString());
            Assert.IsInstanceOf <UnknownType>(id.DataType);
        }
示例#7
0
        public void SudLoadProgramOptions()
        {
            var sProject = new Project_v4
            {
                ArchitectureName = "testArch",
                PlatformName     = "testOS",
                Inputs           =
                {
                    new DecompilerInput_v4
                    {
                        User = new UserData_v4
                        {
                            Heuristics ={ new Heuristic_v3                  {
                                      Name = "HeuristicScanning"
                                  } },
                            TextEncoding = "windows-1251",
                            Calls        =
                            {
                                new SerializedCall_v1
                                {
                                    InstructionAddress = "0041230",
                                    NoReturn           = true,
                                }
                            }
                        }
                    }
                }
            };

            Given_Architecture();
            Given_TestOS_Platform();
            platform.Stub(p => p.TryParseAddress(
                              Arg <string> .Is.Equal("0041230"),
                              out Arg <Address> .Out(Address.Ptr32(0x0041230)).Dummy)).Return(true);
            var loader = mr.Stub <ILoader>();

            loader.Stub(l => l.LoadImageBytes(null, 0))
            .IgnoreArguments()
            .Return(new byte[10]);
            loader.Stub(l => l.LoadExecutable(null, null, null))
            .IgnoreArguments()
            .Return(new Program
            {
                Platform = this.platform,
            });
            mr.ReplayAll();

            var ploader = new ProjectLoader(sc, loader);
            var project = ploader.LoadProject("c:\\tmp\\foo\\bar.proj", sProject);

            Assert.IsTrue(project.Programs[0].User.Heuristics.Contains("HeuristicScanning"));
            Assert.AreEqual("windows-1251", project.Programs[0].User.TextEncoding.WebName);
        }
示例#8
0
 public void Setup()
 {
     this.mr       = new MockRepository();
     this.scanner  = mr.StrictMock <IScanner>();
     this.arch     = mr.StrictMock <IProcessorArchitecture>();
     this.platform = mr.StrictMock <IPlatform>();
     arch.Stub(a => a.CreateImageReader(null, null))
     .IgnoreArguments()
     .Do(new Func <MemoryArea, Address, ImageReader>((i, a) => new LeImageReader(i, a)));
     platform.Stub(p => p.Architecture).Return(arch);
     scanner.Stub(s => s.Error(null, null))
     .IgnoreArguments()
     .Do(new Action <Address, string>((a, s) => { Assert.Fail(string.Format("{0}: {1}", a, s)); }));
 }
示例#9
0
 public void Setup()
 {
     mr = new MockRepository();
     programHeaders = new List<Elf64_PHdr>();
     sections = new List<ElfSection>();
     platform = mr.Stub<IPlatform>();
     this.sc = new ServiceContainer();
     var cfgSvc = mr.Stub<IConfigurationService>();
     var arch = mr.Stub<IProcessorArchitecture>();
     platform.Stub(p => p.MakeAddressFromLinear(0))
         .IgnoreArguments()
         .Do(new Func<ulong, Address>(u => Address.Ptr64(u)));
     cfgSvc.Stub(c => c.GetArchitecture("x86-protected-64")).Return(arch);
     sc.AddService<IConfigurationService>(cfgSvc);
 }
示例#10
0
        public void Setup()
        {
            mr             = new MockRepository();
            programHeaders = new List <Elf64_PHdr>();
            sections       = new List <ElfSection>();
            platform       = mr.Stub <IPlatform>();
            this.sc        = new ServiceContainer();
            var cfgSvc = mr.Stub <IConfigurationService>();
            var arch   = mr.Stub <IProcessorArchitecture>();

            platform.Stub(p => p.MakeAddressFromLinear(0))
            .IgnoreArguments()
            .Do(new Func <ulong, Address>(u => Address.Ptr64(u)));
            cfgSvc.Stub(c => c.GetArchitecture("x86-protected-64")).Return(arch);
            sc.AddService <IConfigurationService>(cfgSvc);
        }
示例#11
0
 private void Given_Platform()
 {
     platform = mr.Stub<IPlatform>();
     platform.Stub(p => p.LookupProcedureByName("", "")).IgnoreArguments().Return(new ExternalProcedure("", null));
     platform.Replay();
 }
示例#12
0
 private void Expect_TryParseAddress(string sAddr, Address addr)
 {
     platform.Stub(p => p.TryParseAddress(
                       Arg <string> .Is.Equal(sAddr),
                       out Arg <Address> .Out(addr).Dummy)).Return(true);
 }
示例#13
0
 private void Expect_LoadOptions()
 {
     platform.Stub(p => p.LoadUserOptions(null))
     .IgnoreArguments()
     .Do(new Action <Dictionary <string, object> >(options => { this.loadedOptions = options; }));
 }
示例#14
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);
        }
示例#15
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.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);
        }
示例#16
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.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;
        }
 private void Given_Msdos_ish_platform()
 {
     this.platform = mr.Stub<IPlatform>();
     platform.Stub(p => p.GetPrimitiveTypeName(PrimitiveType.Int16, "C")).Return("int");
     platform.Stub(p => p.GetPrimitiveTypeName(PrimitiveType.Int32, "C")).Return("long");
 }
示例#18
0
 private void Given_Msdos_ish_platform()
 {
     this.platform = mr.Stub <IPlatform>();
     platform.Stub(p => p.GetPrimitiveTypeName(PrimitiveType.Int16, "C")).Return("int");
     platform.Stub(p => p.GetPrimitiveTypeName(PrimitiveType.Int32, "C")).Return("long");
 }
示例#19
0
 private void Given_Pointers(Address[] addresses)
 {
     platform.Stub(s => s.CreatePointerScanner(null, null, null, PointerScannerFlags.All))
     .IgnoreArguments()
     .Return(addresses);
 }