diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2022-07-07 21:03:29 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2022-08-10 15:17:53 -0400 |
| commit | 390d5d27d4de6b7c9cb06b957a483bb2ab69f241 (patch) | |
| tree | 556133db637166968a77d68daf7ff2160df79b40 /suite | |
| parent | 4037000b6cb8a184ad098d0eff397518d7fe55b9 (diff) | |
Merge variables API/UI, variable liveness API for determining soundness of variable merges
Diffstat (limited to 'suite')
| -rw-r--r-- | suite/testcommon.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py index a2c77037..f77d3cf6 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -1447,6 +1447,51 @@ class TestBuilder(Builder): assert code1 != code2 assert text1 != text2, f"{asm1} and {asm2} are different but both disassemble to {text1}" + def test_merge_vars(self): + """Variable merging produced different output""" + file_name = self.unpackage_file("array_test.bndb") + try: + with binja.BinaryViewType.get_view_of_file(file_name) as bv: + func = bv.get_function_at(0x100003920) + target = None + sources = [] + for var in func.vars: + if var.storage == -0x758: + target = var + func.delete_user_var(var) + if var.storage in [-0x760, -0x768, -0x778]: + sources.append(var) + func.delete_user_var(var) + + func.merge_vars(target, sources) + bv.update_analysis_and_wait() + + retinfo = ["HLIL after merge: " + x for x in str(func.hlil).split("\n")] + + sources = sources[1:] + func.unmerge_vars(target, sources) + bv.update_analysis_and_wait() + + retinfo += ["HLIL after unmerge: " + x for x in str(func.hlil).split("\n")] + return retinfo + finally: + self.delete_package("array_test.bndb") + + def test_live_instrs_for_var(self): + """Live instructions for variable produced different output""" + file_name = self.unpackage_file("array_test.bndb") + try: + with binja.BinaryViewType.get_view_of_file(file_name) as bv: + func = bv.get_function_at(0x100003920) + retinfo = [] + for var in func.vars: + instrs = func.mlil.get_live_instructions_for_var(var) + for instr in instrs: + retinfo += [f"MLIL live instr for {var}: {repr(instr)}"] + return retinfo + finally: + self.delete_package("array_test.bndb") + class VerifyBuilder(Builder): """ The VerifyBuilder is for tests that verify |
