# unimplemented instructions # # Create a report showing unimplemented instructions from collections import defaultdict insts = defaultdict(lambda:0) addrs = {} for ins in bv.llil_instructions: if ins.operation == LowLevelILOperation.LLIL_UNIMPL: mnem = bv.get_disassembly(ins.address, ins.il_basic_block.arch).split()[0] insts[mnem + '-' + ins.il_basic_block.arch.name] = insts[mnem + '-' + ins.il_basic_block.arch.name] + 1 addrs[mnem + '-' + ins.il_basic_block.arch.name] = ins.address lines = list(insts.items()) lines = sorted(lines, key=lambda x: x[1], reverse=True) contents = "| Memonic-Arch | Count | Example Address |\n|---|---|---|\n" for mnem, count in lines: contents += f"|{mnem}|{count}|[{hex(addrs[mnem])}](binaryninja://?expr={hex(addrs[mnem])})|\n" bv.show_markdown_report("Unimplemented counts", contents, contents)