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 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
def test_offset(self): node = gtirb.Offset(element_id=uuid.uuid4(), displacement=123) string = repr(node) new_node = eval(string) self.assertEqual(node.element_id, new_node.element_id) self.assertEqual(node.displacement, new_node.displacement)