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); } }
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]); }
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()); }
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")); }
public void Tlldr_Empty() { Given_ArchitectureStub(); mr.ReplayAll(); var tlLdr = new TypeLibraryLoader(arch, true); TypeLibrary lib = tlLdr.Load(new SerializedLibrary()); }
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); }
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; } }
public static TypeLibrary Load(IProcessorArchitecture arch, SerializedLibrary slib) { var tlldr = new TypeLibraryLoader(arch, true); var tlib = tlldr.Load(slib); return tlib; }
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()); }
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")); }
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]); }
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")); }