diff --git a/generic_patcher.py b/generic_patcher.py index 40acf79..94ef311 100644 --- a/generic_patcher.py +++ b/generic_patcher.py @@ -128,11 +128,39 @@ def patch_bl(self, src, dst): b = (0xF800 | diff_lower) c = (a << 16) | b print "patched: %X to call %X BL opcode: %X" % (src, dst, c) - return struct.pack("> 12) & 0x3ff + diff_lower = ((diff & 0xfff) >> 1) | (((diff >>22)&1) << 11) | (((diff >> 23) & 1) <<13) + a = (0xF000 | diff_upper)# << 16 + b = (0x9000 | diff_lower) + if diff < 0: + a |= 0x0400 + else: + b = b^ 0x2800 + c = (a << 16) | b + print "patched: %X to call %X B.W opcode: %s" % (src, dst, + struct.pack("