From dbe41c6c21f96bc13fff3d7fb2b4053a237fafb6 Mon Sep 17 00:00:00 2001 From: doronz88 Date: Wed, 11 Sep 2024 15:41:21 +0300 Subject: [PATCH] verify-opcode: fix implementation --- fa/commands/verify_opcode.py | 11 ++++++----- fa/utils.py | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/fa/commands/verify_opcode.py b/fa/commands/verify_opcode.py index 3babdb5..1519be1 100644 --- a/fa/commands/verify_opcode.py +++ b/fa/commands/verify_opcode.py @@ -1,5 +1,5 @@ from argparse import RawTextHelpFormatter -from typing import Generator, Iterable +from typing import Generator, List, Union from fa import context, utils @@ -41,10 +41,11 @@ def get_parser(): @context.ida_context @utils.yield_unique -def verify_opcode(addresses: Iterable[int], mnem: str, regs_description) -> Generator[int, None, None]: +def verify_opcode(addresses: List[int], mnems: Union[str, List[str]], regs_description) \ + -> Generator[int, None, None]: for ea in addresses: current_mnem = idc.print_insn_mnem(ea).lower() - if current_mnem == mnem: + if current_mnem in mnems: if not regs_description: yield ea continue @@ -57,6 +58,6 @@ def verify_opcode(addresses: Iterable[int], mnem: str, regs_description) -> Gene yield ea -def run(segments, args, addresses: Iterable[int], interpreter=None, **kwargs): - regs_description = utils.create_create_regs_description(args) +def run(segments, args, addresses: List[int], interpreter=None, **kwargs) -> List[int]: + regs_description = utils.create_regs_description_from_args(args) return list(verify_opcode(addresses, args.mnem, regs_description)) diff --git a/fa/utils.py b/fa/utils.py index 5b9b61d..2fd7949 100644 --- a/fa/utils.py +++ b/fa/utils.py @@ -122,7 +122,7 @@ def find_or_create_struct(name): return sid -def create_create_regs_description(*regs) -> List[Tuple[int, str]]: +def create_regs_description(*regs) -> List[Tuple[int, str]]: result = [] for i, r in enumerate(regs): if r is not None: @@ -142,7 +142,7 @@ def create_regs_description_from_args(*args) -> List[Tuple[int, str]]: if v is not None: v = [i.strip() for i in v.split(',')] regs.append(v) - return create_create_regs_description(*regs) + return create_regs_description(*regs) def size_of_operand(op: 'ida_ua.op_t') -> int: @@ -267,7 +267,7 @@ def compare_arm_coprocessor_operand(ea: int, index: int, values: Iterable[str]) operand = insn.ops[1] if index == 2: - op_val = operand.value + op_val = operand.reg return compare_reg_value(op_val, values) if index == 3: