indirect_calls: fix typing circular dependencies

This commit is contained in:
William Ballenthin
2021-06-09 23:28:05 -06:00
parent 3d8edc513c
commit 459df37b13
3 changed files with 5 additions and 5 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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