From 459df37b13d62c4f31389f3e14c437497cb32ea4 Mon Sep 17 00:00:00 2001 From: William Ballenthin Date: Wed, 9 Jun 2021 23:28:05 -0600 Subject: [PATCH] indirect_calls: fix typing circular dependencies --- capa/features/extractors/viv/extractor.py | 1 - capa/features/extractors/viv/indirect_calls.py | 8 +++++--- capa/features/extractors/viv/insn.py | 1 - 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/capa/features/extractors/viv/extractor.py b/capa/features/extractors/viv/extractor.py index ab3c0843..15f3973a 100644 --- a/capa/features/extractors/viv/extractor.py +++ b/capa/features/extractors/viv/extractor.py @@ -10,7 +10,6 @@ import logging import viv_utils import viv_utils.flirt -import capa.features.extractors import capa.features.extractors.viv.file import capa.features.extractors.viv.insn import capa.features.extractors.viv.function diff --git a/capa/features/extractors/viv/indirect_calls.py b/capa/features/extractors/viv/indirect_calls.py index 767b2556..6a655596 100644 --- a/capa/features/extractors/viv/indirect_calls.py +++ b/capa/features/extractors/viv/indirect_calls.py @@ -15,7 +15,9 @@ import envi.archs.i386.disasm import envi.archs.amd64.disasm from vivisect import VivWorkspace -from capa.features.extractors.viv.extractor import InstructionHandle +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from capa.features.extractors.viv.extractor import InstructionHandle # pull out consts for lookup performance i386RegOper = envi.archs.i386.disasm.i386RegOper @@ -132,14 +134,14 @@ def find_definition(vw: VivWorkspace, va: int, reg: int) -> Tuple[int, int]: raise NotFoundError() -def is_indirect_call(vw: VivWorkspace, va: int, insn: Optional[InstructionHandle] = None) -> bool: +def is_indirect_call(vw: VivWorkspace, va: int, insn: Optional["InstructionHandle"] = None) -> bool: if insn is None: insn = vw.parseOpcode(va) return insn.mnem in ("call", "jmp") and isinstance(insn.opers[0], envi.archs.i386.disasm.i386RegOper) -def resolve_indirect_call(vw: VivWorkspace, va: int, insn: Optional[InstructionHandle] = None) -> Tuple[int, int]: +def resolve_indirect_call(vw: VivWorkspace, va: int, insn: Optional["InstructionHandle"] = None) -> Tuple[int, int]: """ inspect the given indirect call instruction and attempt to resolve the target address. diff --git a/capa/features/extractors/viv/insn.py b/capa/features/extractors/viv/insn.py index 29a8e4e2..fb1b2d45 100644 --- a/capa/features/extractors/viv/insn.py +++ b/capa/features/extractors/viv/insn.py @@ -15,7 +15,6 @@ import envi.archs.amd64.regs import envi.archs.i386.disasm import envi.archs.amd64.disasm -import capa.features.extractors.viv import capa.features.extractors.helpers import capa.features.extractors.viv.helpers from capa.features.insn import API, Number, Offset, Mnemonic