def type_undefined(self, view, name, type): def type_undefined_complete(self): results.append("type undefined {0} {1}".format(name)) evt = binja.AnalysisCompletionEvent(bv, type_undefined_complete)
def test_events(self): """Event failure""" file_name = self.unpackage_file("helloworld") bv = binja.BinaryViewType['ELF'].open(file_name) bv.update_analysis_and_wait() results = [] def simple_complete(self): results.append("analysis complete") evt = binja.AnalysisCompletionEvent(bv, simple_complete) class NotifyTest(binja.BinaryDataNotification): def data_written(self, view, offset, length): results.append("data written: offset {0} length {1}".format( hex(offset), hex(length))) def data_inserted(self, view, offset, length): results.append("data inserted: offset {0} length {1}".format( hex(offset), hex(length))) def data_removed(self, view, offset, length): results.append("data removed: offset {0} length {1}".format( hex(offset), hex(length))) def function_added(self, view, func): results.append("function added: {0}".format(func.name)) def function_removed(self, view, func): results.append("function removed: {0}".format(func.name)) def data_var_added(self, view, var): results.append("data var added: {0}".format(hex(var.address))) def data_var_removed(self, view, var): results.append("data var removed: {0}".format(hex( var.address))) def string_found(self, view, string_type, offset, length): results.append("string found: offset {0} length {1}".format( hex(offset), hex(length))) def string_removed(self, view, string_type, offset, length): results.append("string removed: offset {0} length {1}".format( hex(offset), hex(length))) def type_defined(self, view, name, type): results.append("type defined: {0}".format(name)) def type_undefined(self, view, name, type): results.append("type undefined: {0}".format(name)) test = NotifyTest() bv.register_notification(test) sacrificial_addr = 0x84fc type, name = bv.parse_type_string("int foo") type_id = type.generate_auto_type_id("source", name) bv.define_type(type_id, name, type) bv.undefine_type(type_id) bv.update_analysis_and_wait() bv.insert(sacrificial_addr, b"AAAA") bv.update_analysis_and_wait() bv.define_data_var(sacrificial_addr, binja.types.Type.int(4)) bv.update_analysis_and_wait() bv.write(sacrificial_addr, b"BBBB") bv.update_analysis_and_wait() bv.add_function(sacrificial_addr) bv.update_analysis_and_wait() bv.remove_function(bv.get_function_at(sacrificial_addr)) bv.update_analysis_and_wait() bv.undefine_data_var(sacrificial_addr) bv.update_analysis_and_wait() bv.remove(sacrificial_addr, 4) bv.update_analysis_and_wait() bv.unregister_notification(test) return fixOutput(sorted(results))
def string_removed(self, view, string_type, offset, length): def string_removed_complete(self): results.append("string removed {0} {1}".format(offset, length)) evt = binja.AnalysisCompletionEvent(bv, string_removed_complete)
def data_var_updated(self, view, var): def data_var_updated_complete(self): results.append("data var updated {0}".format(var.name)) evt = binja.AnalysisCompletionEvent(bv, data_var_updated_complete)
def function_update_requested(self, view, func): def function_update_requested_complete(self): results.append("function update requested {0}".format(func.name)) evt = binja.AnalysisCompletionEvent(bv, function_update_requested_complete)
def data_removed(self, view, offset, length): def data_removed_complete(self): results.append("data removed {0} {1}".format(offset, length)) evt = binja.AnalysisCompletionEvent(bv, data_removed_complete)
def data_written(self, view, offset, length): def data_written_complete(self): results.append("data written {0} {1}".format(offset, length)) evt = binja.AnalysisCompletionEvent(bv, data_written_complete)