Esempio n. 1
0
        public TypeLibrary LoadLibrary(IPlatform platform, string name, TypeLibrary dstLib)
        {
            try
            {
                string libFileName = InstalledFileLocation(name);
                if (!File.Exists(libFileName))
                {
                    return(dstLib);
                }

                byte[] bytes;
                var    fsSvc = services.RequireService <IFileSystemService>();
                using (var stm = fsSvc.CreateFileStream(libFileName, FileMode.Open, FileAccess.Read))
                {
                    bytes = new Byte[stm.Length];
                    stm.Read(bytes, 0, (int)stm.Length);
                }
                var tlldr = new TypeLibraryLoader(services, libFileName, bytes);
                var lib   = tlldr.Load(platform, dstLib);
                return(lib);
            }
            catch
            {
                return(dstLib);
            }
        }
Esempio n. 2
0
        public void Tlldr_bothordinalandname()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();
            var tlLDr = new TypeLibraryLoader(arch, true);
            var slib  = new SerializedLibrary {
                Procedures =
                {
                    new Procedure_v1 {
                        Name      = "foo",
                        Ordinal   = 2,
                        Signature = new SerializedSignature{
                            ReturnValue = new Argument_v1{
                                Type = new VoidType_v1()
                            }
                        }
                    }
                }
            };
            var lib = tlLDr.Load(slib);

            mr.VerifyAll();
            Assert.AreEqual(1, lib.ServicesByVector.Count);
            Assert.IsNotNull(lib.ServicesByVector[2]);
        }
Esempio n. 3
0
        public void Tlldr_typedef_ptr_int()
        {
            Given_ArchitectureStub();
            Given_Arch_PointerDataType(PrimitiveType.Pointer32);
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib  = new SerializedLibrary
            {
                Types = new SerializedType[]
                {
                    new SerializedTypedef {
                        Name     = "pint",
                        DataType = new PointerType_v1
                        {
                            DataType = new PrimitiveType_v1 {
                                Domain = Domain.SignedInt, ByteSize = 4
                            }
                        }
                    }
                }
            };
            var lib = tlLdr.Load(slib);

            Assert.AreEqual("(ptr int32)", lib.LookupType("pint").ToString());
        }
Esempio n. 4
0
        public void Tlldr_void_fn()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib  = new SerializedLibrary
            {
                Procedures =
                {
                    new Procedure_v1 {
                        Name      = "foo",
                        Signature = new SerializedSignature
                        {
                            Convention  = "__cdecl",
                            ReturnValue = new Argument_v1{
                                Type = new VoidType_v1()
                            },
                        }
                    }
                }
            };
            var lib = tlLdr.Load(slib);

            mr.VerifyAll();
            Assert.AreEqual(
                "void foo()",
                lib.Lookup("foo").ToString("foo"));
        }
Esempio n. 5
0
        public void Tlldr_Empty()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var         tlLdr = new TypeLibraryLoader(arch, true);
            TypeLibrary lib   = tlLdr.Load(new SerializedLibrary());
        }
Esempio n. 6
0
        public void Tlldr_Empty()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            TypeLibrary lib = tlLdr.Load(new SerializedLibrary());
        }
Esempio n. 7
0
        public void TLLDR_Typedef()
        {
            var contents =
                @"<?xml version=""1.0"" encoding=""UTF-8""?>
<library xmlns=""http://schemata.jklnet.org/Decompiler"">
  <Types>
    <typedef name=""INT"">
      <prim domain=""SignedInt"" size=""4"" />
    </typedef>
  </Types>
</library>";

            CreateTypeLibraryLoader("c:\\bar\\foo.xml", contents);
            var lib = tlldr.Load(platform, new TypeLibrary());

            Assert.AreEqual(1, lib.Types.Count);
            Assert.AreEqual("int32", lib.Types["INT"].ToString());
            Assert.AreEqual(0, lib.Signatures.Count);
        }
Esempio n. 8
0
        public void Tlldr_typedef_int()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib  = new SerializedLibrary
            {
                Types = new SerializedType[]
                {
                    new SerializedTypedef {
                        Name = "int", DataType = new PrimitiveType_v1 {
                            Domain = Domain.SignedInt, ByteSize = 4
                        }
                    }
                }
            };
            var lib = tlLdr.Load(slib);

            Assert.AreSame(PrimitiveType.Int32, lib.LookupType("int"));
        }
        //$REFACTOR: needs a better name.
        public TypeLibrary LoadLibrary(IPlatform platform, string name, TypeLibrary dstLib)
        {
            try
            {
                string libFileName = ImportFileLocation(name);
                if (!File.Exists(libFileName))
                    return dstLib;

                byte[] bytes;
                var fsSvc = services.RequireService<IFileSystemService>();
                using (var stm = fsSvc.CreateFileStream(libFileName, FileMode.Open, FileAccess.Read))
                {
                    bytes = new Byte[stm.Length];
                    stm.Read(bytes, 0, (int)stm.Length);
                }
                var tlldr = new TypeLibraryLoader(services, libFileName, bytes);
                var lib = tlldr.Load(platform, dstLib);
                return lib;
            }
            catch
            {
                return dstLib;
            }
        }
Esempio n. 10
0
 public static TypeLibrary Load(IProcessorArchitecture arch, SerializedLibrary slib)
 {
     var tlldr = new TypeLibraryLoader(arch, true);
     var tlib = tlldr.Load(slib);
     return tlib;
 }
Esempio n. 11
0
        public void Tlldr_typedef_ptr_int()
        {
            Given_ArchitectureStub();
            Given_Arch_PointerDataType(PrimitiveType.Pointer32);
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib = new SerializedLibrary
            {
                Types = new SerializedType[]
                {
                    new SerializedTypedef { 
                        Name="pint", 
                        DataType= new PointerType_v1
                        {
                            DataType = new PrimitiveType_v1 { Domain = Domain.SignedInt, ByteSize=4 } 
                        }
                    }
                }
            };
            var lib = tlLdr.Load(slib);

            Assert.AreEqual("(ptr int32)", lib.LookupType("pint").ToString());
        }
Esempio n. 12
0
        public void Tlldr_typedef_int()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib = new SerializedLibrary
            {
                Types = new SerializedType[]
                {
                    new SerializedTypedef { Name="int", DataType=new PrimitiveType_v1 { Domain = Domain.SignedInt, ByteSize=4 }}
                }
            };
            var lib = tlLdr.Load(slib);

            Assert.AreSame(PrimitiveType.Int32, lib.LookupType("int"));
        }
Esempio n. 13
0
        public void Tlldr_bothordinalandname()
        {  
            Given_ArchitectureStub();
            mr.ReplayAll();
            var tlLDr = new TypeLibraryLoader(arch, true);
            var slib = new SerializedLibrary {
                Procedures = {
                    new Procedure_v1 {
                        Name="foo",
                        Ordinal=2,
                        Signature = new SerializedSignature {
                            ReturnValue = new Argument_v1 {
                                Type = new VoidType_v1()
                            }
                        }
                    }
                }
            };
            var lib = tlLDr.Load(slib);

            mr.VerifyAll();
            Assert.AreEqual(1, lib.ServicesByVector.Count);
            Assert.IsNotNull(lib.ServicesByVector[2]);
        }
Esempio n. 14
0
        public void Tlldr_void_fn()
        {
            Given_ArchitectureStub();
            mr.ReplayAll();

            var tlLdr = new TypeLibraryLoader(arch, true);
            var slib = new SerializedLibrary
            {
                Procedures = {
                    new Procedure_v1 { 
                        Name="foo",
                        Signature = new SerializedSignature
                        {
                            Convention="__cdecl",
                            ReturnValue = new Argument_v1 {
                                Type = new VoidType_v1()
                            },
                        }
                    }
                }
            };
            var lib = tlLdr.Load(slib);

            mr.VerifyAll();
            Assert.AreEqual(
                "void foo()",
                lib.Lookup("foo").ToString("foo"));
        }