diff options
| author | Xusheng <xusheng@vector35.com> | 2020-11-03 16:36:38 +0800 |
|---|---|---|
| committer | Xusheng <xusheng@vector35.com> | 2020-11-13 22:24:28 +0800 |
| commit | cb2b7ad0f73751277d88a28e93c1ec99531836b2 (patch) | |
| tree | b85bc574e7b79ac3e9ef7e0e7c889002c233e3f5 /suite | |
| parent | 46a7e1cf763380f70c066fe456615ba4de2d13c0 (diff) | |
add callback for BinaryView finalization and initial analysis completion
Diffstat (limited to 'suite')
| -rw-r--r-- | suite/testcommon.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/suite/testcommon.py b/suite/testcommon.py index 34316a53..992a7961 100644 --- a/suite/testcommon.py +++ b/suite/testcommon.py @@ -1505,3 +1505,39 @@ class VerifyBuilder(Builder): assert(test_helper(binja.PossibleValueSet.in_set_of_values([1,2,3,4]))) assert(test_helper(binja.PossibleValueSet.not_in_set_of_values([1,2,3,4]))) return True + + def test_binaryview_callbacks(self): + """BinaryView finalized callback and analysis completion callback""" + file_name = self.unpackage_file("helloworld") + + # Currently, there is no way to unregister a BinaryView event callback. + # This boolean tells the callback function whether it should run or just return + callback_should_run = True + + def bv_finalized_callback(bv): + if callback_should_run: + bv.store_metadata('finalized', 'yes') + + def bv_finalized_callback_2(bv): + if callback_should_run: + bv.store_metadata('finalized_2', 'yes') + + def bv_analysis_completion_callback(bv): + if callback_should_run: + bv.store_metadata('analysis_completion', 'yes') + + BinaryViewType.add_binaryview_finalized_event(bv_finalized_callback) + BinaryViewType.add_binaryview_finalized_event(bv_finalized_callback_2) + BinaryViewType.add_binaryview_initial_analysis_completion_event(bv_analysis_completion_callback) + + try: + with binja.open_view(file_name) as bv: + finalized = bv.query_metadata('finalized') == 'yes' + finalized_2 = bv.query_metadata('finalized_2') == 'yes' + analysis_completion = bv.query_metadata('analysis_completion') == 'yes' + return finalized and finalized_2 and analysis_completion + + finally: + self.delete_package("helloworld") + callback_should_run = False + |
