def test_insert_bytes():
    ir = gtirb.IR()
    m = gtirb.Module(isa=gtirb.Module.ISA.X64)
    m.ir = ir
    s = gtirb.Section(name=".text")
    s.module = m
    bi = gtirb.ByteInterval(contents=b"\x00\x01\x02\x03\x04\x05\x06\x07",
                            address=0x1000)
    bi.section = s
    b = gtirb.CodeBlock(offset=2, size=2)
    b.byte_interval = bi
    b2 = gtirb.DataBlock(offset=6, size=2)
    b2.byte_interval = bi
    bi.symbolic_expressions[6] = gtirb.SymAddrConst(0, None)
    ctx = gtirb_capstone.RewritingContext(ir)
    ctx.modify_block_insert(m, b, b"\x08\x09", 1)
    assert bi.address == 0x1000
    assert bi.size == 10
    assert bi.contents == b"\x00\x01\x02\x08\x09\x03\x04\x05\x06\x07"
    assert b.offset == 2
    assert b.size == 4
    assert b2.offset == 8
    assert b2.size == 2
    assert 6 not in bi.symbolic_expressions
    assert 8 in bi.symbolic_expressions
Exemple #2
0
    def test_data_blocks(self):
        b = gtirb.DataBlock()

        self.assertEquals(b.address, None)
        self.assertEquals(b.contents, b"")
        self.assertEquals(set(b.references), set())

        bi = gtirb.ByteInterval(address=1, contents=b"abcd1234")
        b.offset = 2
        b.size = 3
        b.byte_interval = bi

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), set())

        s = gtirb.Section()
        bi.section = s
        m = gtirb.Module(name="M")
        sym1 = gtirb.Symbol("test", payload=b)
        sym2 = gtirb.Symbol("test", payload=123)
        sym3 = gtirb.Symbol("test", payload=b)
        m.symbols |= {sym1, sym2, sym3}
        s.module = m

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), {sym1, sym3})
Exemple #3
0
    def test_proxy_blocks(self):
        b = gtirb.ProxyBlock()

        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        m = gtirb.Module(name="M")
        sym1 = gtirb.Symbol("test", payload=b)
        sym2 = gtirb.Symbol("test", payload=123)
        sym3 = gtirb.Symbol("test", payload=b)
        m.symbols |= {sym1, sym2, sym3}
        b.module = m

        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        i = gtirb.IR()
        m.ir = i
        p1 = gtirb.ProxyBlock()
        p2 = gtirb.ProxyBlock()
        p3 = gtirb.ProxyBlock()
        p4 = gtirb.ProxyBlock()
        i.cfg.add(gtirb.Edge(b, p1))
        i.cfg.add(gtirb.Edge(p2, b))
        i.cfg.add(gtirb.Edge(p3, p4))
        i.cfg.add(gtirb.Edge(b, b))

        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set((s, t) for s, t, l in b.incoming_edges),
                          {(p2, b), (b, b)})
        self.assertEquals(set((s, t) for s, t, l in b.outgoing_edges),
                          {(b, p1), (b, b)})
Exemple #4
0
 def test_from_uuid_typed(self):
     nodes = (
         gtirb.IR(),
         gtirb.Module(),
         gtirb.Block(0, 0),
         gtirb.DataObject(0, 0),
         gtirb.ProxyBlock(),
         gtirb.ImageByteMap(),
         gtirb.Section("test", 0, 0),
         gtirb.Symbol("test"),
     )
     for node1 in nodes:
         with self.subTest(type(node1).__name__):
             for node_cls in map(type, nodes):
                 node2 = None
                 try:
                     node2 = node_cls.from_uuid(node1.uuid)
                 except TypeError:
                     if node_cls == type(node1):
                         self.fail(
                             "%s.from_uuid raised error returning node of"
                             "its own type" % node_cls)
                 else:
                     if node_cls != type(node1):
                         self.fail("%s.from_uuid returned despite getting"
                                   "argument for a node of type %s" %
                                   (node_cls, type(node1)))
                     else:
                         self.assertEqual(node1, node2)
Exemple #5
0
    def test_symbols_named(self):
        m = gtirb.Module(name="test")
        s1 = gtirb.Symbol(name="hello", module=m)
        s2 = gtirb.Symbol(name="world", module=m)

        found = set(m.symbols_named("hello"))
        self.assertEqual(found, {s1})

        found = set(m.symbols_named("world"))
        self.assertEqual(found, {s2})

        # Change the name to verify we update the index
        s1.name = "world"
        found = set(m.symbols_named("hello"))
        self.assertEqual(found, set())

        found = set(m.symbols_named("world"))
        self.assertEqual(found, {s1, s2})

        # Discard the symbol to verify we update the index
        m.symbols.discard(s1)
        found = set(m.symbols_named("world"))
        self.assertEqual(found, {s2})

        # Now add it back to verify we update the index
        m.symbols.add(s1)
        found = set(m.symbols_named("world"))
        self.assertEqual(found, {s1, s2})
    def test_insert_bytes(self):
        ir = gtirb.IR()
        m = gtirb.Module()
        m.ir = ir
        s = gtirb.Section(name=".text")
        s.module = m
        bi = gtirb.ByteInterval(contents=b"\x00\x01\x02\x03\x04\x05\x06\x07")
        bi.section = s
        b = gtirb.CodeBlock(offset=2, size=2)
        b.byte_interval = bi
        b2 = gtirb.DataBlock(offset=6, size=2)
        b2.byte_interval = bi
        bi.symbolic_expressions[6] = gtirb.SymAddrConst(0, None)

        ctx = gtirb_capstone.RewritingContext(ir)
        ctx.modify_block_insert(m, b, b"\x08\x09", 1)

        self.assertEqual(bi.size, 10)
        self.assertEqual(
            bi.contents, b"\x00\x01\x02\x08\x09\x03\x04\x05\x06\x07"
        )
        self.assertEqual(b.offset, 2)
        self.assertEqual(b.size, 4)
        self.assertEqual(b2.offset, 8)
        self.assertEqual(b2.size, 2)
        self.assertNotIn(6, bi.symbolic_expressions)
        self.assertIn(8, bi.symbolic_expressions)
Exemple #7
0
    def test_proxy_blocks(self):
        b = gtirb.ProxyBlock()

        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        m = gtirb.Module()
        sym1 = gtirb.Symbol("test", payload=b)
        sym2 = gtirb.Symbol("test", payload=123)
        sym3 = gtirb.Symbol("test", payload=b)
        m.symbols |= {sym1, sym2, sym3}
        b.module = m

        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        i = gtirb.IR()
        m.ir = i
        e1 = gtirb.Edge(b, gtirb.ProxyBlock())
        e2 = gtirb.Edge(gtirb.ProxyBlock(), b)
        e3 = gtirb.Edge(gtirb.ProxyBlock(), gtirb.ProxyBlock())
        e4 = gtirb.Edge(b, b)
        i.cfg |= {e1, e2, e3, e4}

        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), {e2, e4})
        self.assertEquals(set(b.outgoing_edges), {e1, e4})
Exemple #8
0
def create_interval_etc(address, size):
    """
    Creates a byte interval and all of the containing structures.
    """
    ir = gtirb.IR()
    m = gtirb.Module(name="test", ir=ir)
    s = gtirb.Section(name=".text", module=m)
    bi = gtirb.ByteInterval(address=address, size=size, section=s)
    return ir, m, s, bi
Exemple #9
0
    def test_code_blocks(self):
        b = gtirb.CodeBlock()

        self.assertEquals(b.address, None)
        self.assertEquals(b.contents, b"")
        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        bi = gtirb.ByteInterval(address=1, contents=b"abcd1234")
        b.offset = 2
        b.size = 3
        b.byte_interval = bi

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        s = gtirb.Section()
        bi.section = s
        m = gtirb.Module(name="M")
        sym1 = gtirb.Symbol("test", payload=b)
        sym2 = gtirb.Symbol("test", payload=123)
        sym3 = gtirb.Symbol("test", payload=b)
        m.symbols |= {sym1, sym2, sym3}
        s.module = m

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        i = gtirb.IR()
        m.ir = i
        p1 = gtirb.ProxyBlock()
        p2 = gtirb.ProxyBlock()
        p3 = gtirb.ProxyBlock()
        p4 = gtirb.ProxyBlock()
        i.cfg.add(gtirb.Edge(b, p1))
        i.cfg.add(gtirb.Edge(p2, b))
        i.cfg.add(gtirb.Edge(p3, p4))
        i.cfg.add(gtirb.Edge(b, b))

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(
            set((s, t) for s, t, l in b.incoming_edges), {(p2, b), (b, b)}
        )
        self.assertEquals(
            set((s, t) for s, t, l in b.outgoing_edges), {(b, p1), (b, b)}
        )
    def test_byte_intervals_overlapping(self, scope):
        ir = gtirb.IR()
        m = gtirb.Module(name="test", ir=ir)
        s = gtirb.Section(module=m)
        search_in = scope.select(ir, m, s, None)

        bi1 = gtirb.ByteInterval(address=0x1000, size=8, section=s)
        bi2 = gtirb.ByteInterval(address=0x1004, size=4, section=s)

        found = set(search_in.byte_intervals_on(0x1005))
        self.assertEqual(found, {bi1, bi2})
Exemple #11
0
 def test_from_uuid(self):
     for node1 in (
             gtirb.IR(),
             gtirb.Module(),
             gtirb.CodeBlock(size=0),
             gtirb.DataBlock(size=0),
             gtirb.ProxyBlock(),
             gtirb.Section(name="test"),
             gtirb.Symbol(name="test"),
             gtirb.ByteInterval(),
     ):
         with self.subTest(type(node1).__name__):
             node2 = gtirb.Node.from_uuid(node1.uuid)
             self.assertEqual(node1, node2)
Exemple #12
0
    def test_remove_from_cache(self):
        ir = gtirb.IR()
        m = gtirb.Module()
        m.ir = ir
        s = gtirb.Section()

        s.module = m
        self.assertEqual(ir.get_by_uuid(s.uuid), s)

        s.module = None
        self.assertIsNone(ir.get_by_uuid(s.uuid))

        m.sections.discard(s)
        self.assertIsNone(ir.get_by_uuid(s.uuid))
Exemple #13
0
 def test_from_uuid(self):
     for node1 in (
             gtirb.IR(),
             gtirb.Module(),
             gtirb.Block(0, 0),
             gtirb.DataObject(0, 0),
             gtirb.ProxyBlock(),
             gtirb.ImageByteMap(),
             gtirb.Section("test", 0, 0),
             gtirb.Symbol("test"),
     ):
         with self.subTest(type(node1).__name__):
             node2 = gtirb.Node.from_uuid(node1.uuid)
             self.assertEqual(node1, node2)
Exemple #14
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
    def create_multi_module_ir(self) -> gtirb.IR:
        ir = gtirb.IR()

        m1 = gtirb.Module(
            name="ex",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
        )
        m1.ir = ir
        add_standard_aux_data_tables(m1)
        _, bi1 = add_text_section(m1)
        add_function(m1, "main", add_code_block(bi1, b"\xC3"))

        m2 = gtirb.Module(
            name="fun.so",
            file_format=gtirb.Module.FileFormat.ELF,
            isa=gtirb.Module.ISA.X64,
        )
        m2.ir = ir
        add_standard_aux_data_tables(m2)
        _, bi2 = add_text_section(m2)
        add_function(m2, "fun", add_code_block(bi2, b"\xC3"))

        return ir
Exemple #16
0
    def test_code_blocks(self):
        b = gtirb.CodeBlock()

        self.assertEquals(b.address, None)
        self.assertEquals(b.contents, b"")
        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        bi = gtirb.ByteInterval(address=1, contents=b"abcd1234")
        b.offset = 2
        b.size = 3
        b.byte_interval = bi

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), set())
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        s = gtirb.Section()
        bi.section = s
        m = gtirb.Module()
        sym1 = gtirb.Symbol("test", payload=b)
        sym2 = gtirb.Symbol("test", payload=123)
        sym3 = gtirb.Symbol("test", payload=b)
        m.symbols |= {sym1, sym2, sym3}
        s.module = m

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), set())
        self.assertEquals(set(b.outgoing_edges), set())

        i = gtirb.IR()
        m.ir = i
        e1 = gtirb.Edge(b, gtirb.ProxyBlock())
        e2 = gtirb.Edge(gtirb.ProxyBlock(), b)
        e3 = gtirb.Edge(gtirb.ProxyBlock(), gtirb.ProxyBlock())
        e4 = gtirb.Edge(b, b)
        i.cfg |= {e1, e2, e3, e4}

        self.assertEquals(b.address, 3)
        self.assertEquals(b.contents, b"cd1")
        self.assertEquals(set(b.references), {sym1, sym3})
        self.assertEquals(set(b.incoming_edges), {e2, e4})
        self.assertEquals(set(b.outgoing_edges), {e1, e4})
Exemple #17
0
def create_test_module(
    file_format: gtirb.Module.FileFormat,
    isa: gtirb.Module.ISA,
    binary_type: Iterable[str] = None,
) -> Tuple[gtirb.IR, gtirb.Module]:
    """
    Creates a test GTIRB module and returns the IR object and module object.
    """
    ir = gtirb.IR()
    m = gtirb.Module(isa=isa, file_format=file_format, name="test")
    m.ir = ir

    add_standard_aux_data_tables(m)
    if binary_type:
        m.aux_data["binaryType"].data = list(binary_type)

    return ir, m
Exemple #18
0
    def test_modules(self):
        s1 = gtirb.Section(
            name="s1", byte_intervals=[gtirb.ByteInterval(address=4, size=4)]
        )
        s2 = gtirb.Section(
            name="s2", byte_intervals=[gtirb.ByteInterval(address=8, size=8)]
        )
        s3 = gtirb.Section(
            name="s3", byte_intervals=[gtirb.ByteInterval(address=100, size=1)]
        )
        s4 = gtirb.Section(
            name="s4", byte_intervals=[gtirb.ByteInterval(size=1000)]
        )
        m = gtirb.Module(name="M", sections=[s1, s2, s3, s4])

        self.assertEquals(set(m.sections_on(3)), set())
        self.assertEquals(set(m.sections_on(4)), {s1})
        self.assertEquals(set(m.sections_on(7)), {s1})
        self.assertEquals(set(m.sections_on(8)), {s2})
        self.assertEquals(set(m.sections_on(15)), {s2})
        self.assertEquals(set(m.sections_on(16)), set())
        self.assertEquals(set(m.sections_on(99)), set())
        self.assertEquals(set(m.sections_on(100)), {s3})
        self.assertEquals(set(m.sections_on(101)), set())

        self.assertEquals(set(m.sections_on(range(0, 100))), {s1, s2})
        self.assertEquals(set(m.sections_on(range(0, 101))), {s1, s2, s3})
        self.assertEquals(set(m.sections_on(range(0, 102))), {s1, s2, s3})
        self.assertEquals(set(m.sections_on(range(7, 7 + 4))), {s1, s2})
        self.assertEquals(set(m.sections_on(range(8, 8 + 4))), {s2})
        self.assertEquals(set(m.sections_on(range(17, 17 + 80))), set())

        self.assertEquals(set(m.sections_at(3)), set())
        self.assertEquals(set(m.sections_at(4)), {s1})
        self.assertEquals(set(m.sections_at(5)), set())
        self.assertEquals(set(m.sections_at(7)), set())
        self.assertEquals(set(m.sections_at(8)), {s2})
        self.assertEquals(set(m.sections_at(9)), set())
        self.assertEquals(set(m.sections_at(99)), set())
        self.assertEquals(set(m.sections_at(100)), {s3})
        self.assertEquals(set(m.sections_at(101)), set())

        self.assertEquals(set(m.sections_at(range(0, 100))), {s1, s2})
        self.assertEquals(set(m.sections_at(range(0, 101))), {s1, s2, s3})
        self.assertEquals(set(m.sections_at(range(5, 10))), {s2})
        self.assertEquals(set(m.sections_at(range(95, 105))), {s3})
    def test_byte_intervals_on(self, scope):
        ir = gtirb.IR()
        m = gtirb.Module(name="test", ir=ir)
        s = gtirb.Section(module=m)
        search_in = scope.select(ir, m, s, None)

        bi1 = gtirb.ByteInterval(address=0x1000, size=4, section=s)
        bi2 = gtirb.ByteInterval(address=0x1004, size=4, section=s)

        found = set(search_in.byte_intervals_on(0x1000))
        self.assertEqual(found, {bi1})

        found = set(search_in.byte_intervals_on(0x1001))
        self.assertEqual(found, {bi1})

        found = set(search_in.byte_intervals_on(range(0x1000, 0x1008)))
        self.assertEqual(found, {bi1, bi2})

        found = set(search_in.byte_intervals_on(range(0x1000, 0x1008, 16)))
        self.assertEqual(found, {bi1, bi2})

        # Change the address to verify we update the index
        bi2.address = 0x2000

        found = set(search_in.byte_intervals_on(0x1005))
        self.assertEqual(found, set())

        found = set(search_in.byte_intervals_on(0x2001))
        self.assertEqual(found, {bi2})

        # Discard the interval to verify we update the index
        bi2.section = None

        found = set(search_in.byte_intervals_on(0x2001))
        self.assertEqual(found, set())

        # Now add it back to verify we update the index
        s.byte_intervals.add(bi2)
        found = set(search_in.byte_intervals_on(0x2001))
        self.assertEqual(found, {bi2})
Exemple #20
0
    def test_get_by_uuid(self):
        ir1 = gtirb.IR()
        ir2 = gtirb.IR()

        # test nodes from one IR don't pollute the cache of other IRs
        self.assertIsNone(ir1.get_by_uuid(ir2.uuid))
        self.assertIsNone(ir2.get_by_uuid(ir1.uuid))
        self.assertEqual(ir1.get_by_uuid(ir1.uuid), ir1)
        self.assertEqual(ir2.get_by_uuid(ir2.uuid), ir2)

        m = gtirb.Module()
        m.ir = ir1
        s = gtirb.Section()
        s.module = m
        bi = gtirb.ByteInterval()
        bi.section = s
        b = gtirb.CodeBlock()
        b.byte_interval = bi
        sym = gtirb.Symbol("test")
        sym.module = m

        # test all nodes are lookupable by any other node type
        self.assertEqual(ir1.get_by_uuid(m.uuid), m)
        self.assertEqual(ir1.get_by_uuid(s.uuid), s)
        self.assertEqual(ir1.get_by_uuid(bi.uuid), bi)
        self.assertEqual(ir1.get_by_uuid(b.uuid), b)
        self.assertEqual(ir1.get_by_uuid(sym.uuid), sym)

        self.assertEqual(m.ir.get_by_uuid(m.uuid), m)
        self.assertEqual(m.ir.get_by_uuid(s.uuid), s)
        self.assertEqual(m.ir.get_by_uuid(bi.uuid), bi)
        self.assertEqual(m.ir.get_by_uuid(b.uuid), b)
        self.assertEqual(m.ir.get_by_uuid(sym.uuid), sym)

        self.assertEqual(s.ir.get_by_uuid(m.uuid), m)
        self.assertEqual(s.ir.get_by_uuid(s.uuid), s)
        self.assertEqual(s.ir.get_by_uuid(bi.uuid), bi)
        self.assertEqual(s.ir.get_by_uuid(b.uuid), b)
        self.assertEqual(s.ir.get_by_uuid(sym.uuid), sym)

        self.assertEqual(bi.ir.get_by_uuid(m.uuid), m)
        self.assertEqual(bi.ir.get_by_uuid(s.uuid), s)
        self.assertEqual(bi.ir.get_by_uuid(bi.uuid), bi)
        self.assertEqual(bi.ir.get_by_uuid(b.uuid), b)
        self.assertEqual(bi.ir.get_by_uuid(sym.uuid), sym)

        self.assertEqual(b.ir.get_by_uuid(m.uuid), m)
        self.assertEqual(b.ir.get_by_uuid(s.uuid), s)
        self.assertEqual(b.ir.get_by_uuid(bi.uuid), bi)
        self.assertEqual(b.ir.get_by_uuid(b.uuid), b)
        self.assertEqual(b.ir.get_by_uuid(sym.uuid), sym)

        self.assertEqual(sym.ir.get_by_uuid(m.uuid), m)
        self.assertEqual(sym.ir.get_by_uuid(s.uuid), s)
        self.assertEqual(sym.ir.get_by_uuid(bi.uuid), bi)
        self.assertEqual(sym.ir.get_by_uuid(b.uuid), b)
        self.assertEqual(sym.ir.get_by_uuid(sym.uuid), sym)

        # test removing a node removes all children as well
        bi.section = None

        self.assertEqual(ir1.get_by_uuid(m.uuid), m)
        self.assertEqual(ir1.get_by_uuid(s.uuid), s)
        self.assertIsNone(ir1.get_by_uuid(bi.uuid))
        self.assertIsNone(ir1.get_by_uuid(b.uuid))
        self.assertEqual(ir1.get_by_uuid(sym.uuid), sym)

        bi.section = s

        self.assertEqual(ir1.get_by_uuid(m.uuid), m)
        self.assertEqual(ir1.get_by_uuid(s.uuid), s)
        self.assertEqual(ir1.get_by_uuid(bi.uuid), bi)
        self.assertEqual(ir1.get_by_uuid(b.uuid), b)
        self.assertEqual(ir1.get_by_uuid(sym.uuid), sym)
Exemple #21
0
 def test_module(self):
     # TODO: expand this
     node = gtirb.Module(name="M")
     string = repr(node)
     new_node = eval(string)
     self.assertTrue(node.deep_eq(new_node))
Exemple #22
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 #23
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))