Exemple #1
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        ir = gtirb.IR()
        m = gtirb.Module(
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.RAW,
            isa=gtirb.Module.ISA.ValidButUnsupported,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
        )
        m.ir = ir
        s = gtirb.Section(
            name="name",
            flags=(
                gtirb.Section.Flag.Executable,
                gtirb.Section.Flag.Readable,
                gtirb.Section.Flag.Loaded,
                gtirb.Section.Flag.Initialized,
            ),
        )
        s.module = m
        bi = gtirb.ByteInterval(address=0, size=10, contents=b"abcd")
        bi.section = s
        cb = gtirb.CodeBlock(size=4, offset=0, decode_mode=1)
        cb.byte_interval = bi
        db = gtirb.DataBlock(size=6, offset=4)
        db.byte_interval = bi
        sym = gtirb.Symbol(name="name", payload=cb)
        sym.module = m
        sac = gtirb.SymAddrConst(0, sym,
                                 {gtirb.SymbolicExpression.Attribute.Part1})
        bi.symbolic_expressions[2] = sac
        p = gtirb.ProxyBlock()
        p.module = m
        ir.cfg.add(
            gtirb.Edge(
                cb,
                p,
                gtirb.Edge.Label(type=gtirb.Edge.Type.Branch,
                                 conditional=False,
                                 direct=True),
            ))
        ir.cfg.add(gtirb.Edge(p, p))
        m.aux_data["key"] = gtirb.AuxData(gtirb.Offset(s, 777), "Offset")
        ir.aux_data["key"] = gtirb.AuxData("value", "string")

        self.ir = ir
Exemple #2
0
    def test_lazy_never_deserialized(self):
        serialized = gtirb.AuxData("testing 123", "string")._to_protobuf()

        ad1 = gtirb.AuxData._from_protobuf(serialized, self.fake_ir)
        # Peek inside: the data is not yet deserialized
        self.assertTrue(ad1._data is None)

        serialized2 = ad1._to_protobuf()
        self.assertTrue(ad1._data is None)
        self.assertEqual(serialized, serialized2)
Exemple #3
0
 def test_auxdata(self):
     node = gtirb.AuxData(
         type_name="mapping<string,set<UUID>>",
         data={
             "a": set([uuid.uuid4(), uuid.uuid4()]),
             "b": set([uuid.uuid4()]),
         },
     )
     string = repr(node)
     new_node = eval(string)
     # auxdata has no deep_eq
     # (because how can we ensure "data" has a deep_eq?)
     self.assertEqual(node.type_name, new_node.type_name)
     self.assertEqual(node.data, new_node.data)
Exemple #4
0
    def test_lazy(self):
        ad1 = gtirb.AuxData("test1", "string")
        self.assertEqual(ad1.data, "test1")

        serialized = ad1._to_protobuf()
        ad2 = gtirb.AuxData._from_protobuf(serialized, self.fake_ir)
        # Peek inside: the data is not yet deserialized
        self.assertTrue(ad2._data is None)

        # Accessing the data should deserialize
        self.assertEqual(ad1.data, ad2.data)
        self.assertTrue(ad2._data is not None)

        # Just exercise repr
        self.assertEqual(repr(ad2),
                         "AuxData(type_name='string', data='test1', )")
    def make_pe_resource_data(self) -> gtirb.IR:

        ir, m = create_test_module(
            file_format=gtirb.Module.FileFormat.PE,
            isa=gtirb.Module.ISA.X64,
            binary_type=["EXEC", "EXE", "WINDOWS_GUI"],
        )

        _, bi = add_section(m, ".text")
        entry = add_code_block(bi, b"\xC3")
        m.entry_point = entry

        resource_data = b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x00\x00\x00\x02\x00\x06\x00\x00\x00 \x00\x00\x80\
        \x18\x00\x00\x008\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x00\x00\x00\x00\x00\x01\x00\x07\x00\x00\x00P\x00\
        \x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x01\x00\x01\x00\x00\x00h\x00\x00\x80\x00\x00\x00\
        \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\t\x04\
        \x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x00\x00\x00\x01\x00\t\x04\x00\x00\x90\x00\x00\x00\
        \xa0`\x00\x00H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        \xe8`\x00\x00}\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00T\x00e\x00s\
        \x00t\x00 \x00r\x00e\x00s\x00o\x00u\x00r\x00c\x00e\x00 \x00s\
        \x00t\x00r\x00i\x00n\x00g\x00\x00\x00\x00\x00\x00\x00\x00\
        \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
        <?xml version='1.0' encoding='UTF-8' standalone='yes'?>\
        \r\n<assembly xmlns='urn:schemas-microsoft-com:asm.v1\
        ' manifestVersion='1.0'>\r\n  \
        <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\r\n\
            <security>\r\n      <requestedPrivileges>\r\n        \
            <requestedExecutionLevel level='asInvoker' uiAccess='false' />\r\n\
          </requestedPrivileges>\r\n    </security>\r\n  </trustInfo>\
                 \r\n</assembly>\r\n\x00\x00\x00')"

        _, bi = add_section(m, ".rsrc")
        _ = add_byte_block(bi, gtirb.block.DataBlock, resource_data)
        off1 = gtirb.Offset(bi, 0)
        off2 = gtirb.Offset(bi, 72)
        entry1 = (
            [
                72,
                0,
                0,
                0,
                32,
                0,
                0,
                0,
                255,
                255,
                6,
                0,
                255,
                255,
                7,
                0,
                0,
                0,
                0,
                0,
                48,
                16,
                9,
                4,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
            ],
            off1,
            72,
        )
        entry2 = (
            [
                125,
                1,
                0,
                0,
                32,
                0,
                0,
                0,
                255,
                255,
                24,
                0,
                255,
                255,
                1,
                0,
                0,
                0,
                0,
                0,
                48,
                16,
                9,
                4,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
            ],
            off2,
            381,
        )
        m.aux_data["peResources"] = gtirb.AuxData(
            [entry1, entry2],
            "sequence<tuple<sequence<uint8_t>,Offset,uint64_t>>",
        )
        return ir
Exemple #6
0
    def test_module(self):
        id1 = uuid.uuid4()
        id2 = uuid.uuid4()
        id3 = uuid.uuid4()
        id4 = uuid.uuid4()
        id5 = uuid.uuid4()
        id6 = uuid.uuid4()
        id7 = uuid.uuid4()
        id8 = uuid.uuid4()

        m1 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertTrue(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("other_value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertTrue(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="other_binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.PE,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.ARM,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="other_name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=5,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=5,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=2, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id4), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id4), ),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym11", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(gtirb.Symbol(name="sym1", uuid=id5), ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect22", uuid=id8),
            ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(gtirb.Section(name="sect2", uuid=id8), ),
            uuid=id1,
        )
        self.assertFalse(m1.deep_eq(m2))

        m2 = gtirb.Module(
            aux_data={"key": gtirb.AuxData("value", "string")},
            binary_path="binary_path",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
            name="name",
            preferred_addr=1,
            rebase_delta=2,
            entry_point=gtirb.CodeBlock(size=1, uuid=id2),
            proxies=(gtirb.ProxyBlock(uuid=id3), gtirb.ProxyBlock(uuid=id4)),
            symbols=(
                gtirb.Symbol(name="sym1", uuid=id5),
                gtirb.Symbol(name="sym2", uuid=id6),
            ),
            sections=(
                gtirb.Section(name="sect1", uuid=id7),
                gtirb.Section(name="sect2", uuid=id8),
            ),
            uuid=id2,
        )
        self.assertFalse(m1.deep_eq(m2))
Exemple #7
0
    def test_ir(self):
        id1 = uuid.uuid4()
        id2 = uuid.uuid4()
        id3 = uuid.uuid4()
        id4 = uuid.uuid4()
        id5 = uuid.uuid4()

        ir1 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        self.assertTrue(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("other_value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        self.assertTrue(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m11", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        self.assertFalse(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(gtirb.Module(name="m1", uuid=id2), ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        self.assertFalse(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=55, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id1,
        )
        self.assertFalse(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(gtirb.Edge(
                gtirb.CodeBlock(size=3, uuid=id4),
                gtirb.CodeBlock(size=4, uuid=id4),
                None,
            ), ),
            version=1,
            uuid=id1,
        )
        self.assertFalse(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=5,
            uuid=id1,
        )
        self.assertFalse(ir1.deep_eq(ir2))

        ir2 = gtirb.IR(
            modules=(
                gtirb.Module(name="m1", uuid=id2),
                gtirb.Module(name="m2", uuid=id3),
            ),
            aux_data={"key": gtirb.AuxData("value", "string")},
            cfg=(
                gtirb.Edge(
                    gtirb.CodeBlock(size=1, uuid=id4),
                    gtirb.CodeBlock(size=2, uuid=id4),
                    None,
                ),
                gtirb.Edge(
                    gtirb.CodeBlock(size=3, uuid=id4),
                    gtirb.CodeBlock(size=4, uuid=id4),
                    None,
                ),
            ),
            version=1,
            uuid=id5,
        )
        self.assertFalse(ir1.deep_eq(ir2))
Exemple #8
0
def add_standard_aux_data_tables(m: gtirb.Module) -> None:
    """
    Adds aux data tables that ddisasm normally produces. This helps avoid
    every test needing to know the schemas.
    """
    m.aux_data["binaryType"] = gtirb.AuxData(type_name="sequence<string>",
                                             data=list())
    m.aux_data["cfiDirectives"] = gtirb.AuxData(
        type_name=(
            "mapping<Offset,sequence<tuple<string,sequence<int64_t>,UUID>>>"),
        data=dict(),
    )
    m.aux_data["comments"] = gtirb.AuxData(type_name="mapping<Offset,string>",
                                           data=dict())
    m.aux_data["sectionProperties"] = gtirb.AuxData(
        type_name="mapping<UUID,tuple<uint64_t,uint64_t>>", data=dict())
    m.aux_data["encodings"] = gtirb.AuxData(type_name="mapping<UUID,string>",
                                            data=dict())
    m.aux_data["functionBlocks"] = gtirb.AuxData(
        type_name="mapping<UUID,set<UUID>>", data=dict())
    m.aux_data["functionEntries"] = gtirb.AuxData(
        type_name="mapping<UUID,set<UUID>>", data=dict())
    m.aux_data["functionNames"] = gtirb.AuxData(type_name="mapping<UUID,UUID>",
                                                data=dict())
    m.aux_data["libraries"] = gtirb.AuxData(type_name="sequence<string>",
                                            data=list())
    m.aux_data["libraryPaths"] = gtirb.AuxData(type_name="sequence<string>",
                                               data=list())
    m.aux_data["padding"] = gtirb.AuxData(type_name="mapping<Offset,uint64_t>",
                                          data=dict())
    m.aux_data["symbolForwarding"] = gtirb.AuxData(
        type_name="mapping<UUID,UUID>", data=dict())
    m.aux_data["symbolicExpressionSizes"] = gtirb.AuxData(
        type_name="mapping<Offset,uint64_t>", data=dict())
    m.aux_data["SCCs"] = gtirb.AuxData(type_name="mapping<UUID,int64_t>",
                                       data=dict())

    if m.file_format == gtirb.Module.FileFormat.ELF:
        m.aux_data["alignment"] = gtirb.AuxData(
            type_name="mapping<UUID,uint64_t>", data=dict())
        m.aux_data["dynamicEntries"] = gtirb.AuxData(
            type_name="set<tuple<string,uint64_t>>", data=set())
        m.aux_data["elfSymbolInfo"] = gtirb.AuxData(
            type_name=(
                "mapping<UUID,tuple<uint64_t,string,string,string,uint64_t>>"),
            data=dict(),
        )
        m.aux_data["elfSymbolTabIdxInfo"] = gtirb.AuxData(
            type_name="mapping<UUID,sequence<tuple<string,uint64_t>>>",
            data=dict(),
        )

    elif m.file_format == gtirb.Module.FileFormat.PE:
        m.aux_data["peExportEntries"] = gtirb.AuxData(
            type_name="sequence<tuple<uint64_t,int64_t,string>>", data=list())
        m.aux_data["peExportedSymbols"] = gtirb.AuxData(
            type_name="sequence<UUID>", data=list())
        m.aux_data["peImportEntries"] = gtirb.AuxData(
            type_name="sequence<tuple<uint64_t,int64_t,string,string>>",
            data=list(),
        )
        m.aux_data["peImportedSymbols"] = gtirb.AuxData(
            type_name="sequence<UUID>", data=list())
        m.aux_data["peResources"] = gtirb.AuxData(
            type_name="sequence<tuple<sequence<uint8_t>,Offset,uint64_t>>",
            data=list(),
        )
Exemple #9
0
def create_floats(filename: str):
    ir = gtirb.IR()
    ir.aux_data["AFloat"] = gtirb.AuxData(0.5, "float")
    ir.aux_data["ADouble"] = gtirb.AuxData(2.0, "double")
    ir.save_protobuf(filename)