import enum import os from typing import Iterator, Optional, Union, overload from . import ( editor as editor, parameters as parameters, types as types ) import lief import lief.assembly def load(path: Union[str | os.PathLike]) -> Optional[DebugInfo]: ... class Scope: class TYPE(enum.Enum): UNKNOWN = 0 UNION = 1 CLASS = 2 STRUCT = 3 NAMESPACE = 4 FUNCTION = 5 COMPILATION_UNIT = 6 @property def name(self) -> str: ... @property def parent(self) -> Optional[Scope]: ... @property def type(self) -> Scope.TYPE: ... def chained(self, sep: str = '::') -> str: ... class Type: class KIND(enum.Enum): UNKNOWN = 0 UNSPECIFIED = 1 BASE = 2 CONST_KIND = 3 CLASS = 4 ARRAY = 5 POINTER = 6 STRUCT = 7 UNION = 8 TYPEDEF = 9 REF = 10 SET_TYPE = 11 STRING = 12 SUBROUTINE = 13 POINTER_MEMBER = 14 PACKED = 15 FILE = 16 THROWN = 17 VOLATILE = 18 RESTRICT = 19 INTERFACE = 20 SHARED = 21 RVALREF = 22 TEMPLATE_ALIAS = 23 COARRAY = 24 DYNAMIC = 25 ATOMIC = 26 IMMUTABLE = 27 ENUM = 28 @property def kind(self) -> Type.KIND: ... @property def name(self) -> Optional[str]: ... @property def size(self) -> Optional[int]: ... @property def location(self) -> lief.debug_location_t: ... @property def is_unspecified(self) -> bool: ... @property def scope(self) -> Optional[Scope]: ... def to_decl(self, opt: lief.DeclOpt = ...) -> str: ... class Variable: @property def name(self) -> str: ... @property def linkage_name(self) -> str: ... @property def address(self) -> Optional[int]: ... @property def size(self) -> Optional[int]: ... @property def is_constexpr(self) -> bool: ... @property def is_stack_based(self) -> bool: ... @property def debug_location(self) -> lief.debug_location_t: ... @property def type(self) -> Optional[Type]: ... @property def scope(self) -> Optional[Scope]: ... @property def description(self) -> str: ... def to_decl(self, opt: lief.DeclOpt = ...) -> str: ... class Function: @property def name(self) -> str: ... @property def linkage_name(self) -> str: ... @property def address(self) -> Optional[int]: ... @property def variables(self) -> Iterator[Optional[Variable]]: ... @property def is_artificial(self) -> bool: ... @property def is_external(self) -> bool: ... @property def size(self) -> int: ... @property def ranges(self) -> list[lief.range_t]: ... @property def debug_location(self) -> lief.debug_location_t: ... @property def type(self) -> Optional[Type]: ... @property def parameters(self) -> list[Optional[Parameter]]: ... @property def thrown_types(self) -> list[Optional[Type]]: ... @property def scope(self) -> Optional[Scope]: ... @property def instructions(self) -> Iterator[Optional[lief.assembly.Instruction]]: ... @property def lexical_blocks(self) -> Iterator[Optional[LexicalBlock]]: ... @property def description(self) -> str: ... def to_decl(self, opt: lief.DeclOpt = ...) -> str: ... class Parameter: class Location: class Type(enum.Enum): UNKNOWN = 0 REGISTER = 1 @property def type(self) -> Parameter.Location.Type: ... class RegisterLoc(Parameter.Location): @property def id(self) -> int: ... @property def name(self) -> str: ... @property def type(self) -> Optional[Type]: ... @property def location(self) -> Optional[Parameter.Location]: ... class CompilationUnit: class Language: class LANG(enum.Enum): @staticmethod def from_value(arg: int, /) -> CompilationUnit.Language.LANG: ... def __eq__(self, arg, /) -> bool: ... def __ne__(self, arg, /) -> bool: ... def __int__(self) -> int: ... UNKNOWN = 0 C = 1 CPP = 2 RUST = 3 DART = 4 MODULA = 5 FORTRAN = 6 SWIFT = 7 D = 8 JAVA = 9 COBOL = 10 lang: CompilationUnit.Language.LANG version: int @property def name(self) -> str: ... @property def producer(self) -> str: ... @property def compilation_dir(self) -> str: ... @property def language(self) -> CompilationUnit.Language: ... @property def low_address(self) -> int: ... @property def high_address(self) -> int: ... @property def size(self) -> int: ... @property def ranges(self) -> list[lief.range_t]: ... @overload def find_function(self, name: str) -> Optional[Function]: ... @overload def find_function(self, addr: int) -> Optional[Function]: ... @overload def find_variable(self, addr: int) -> Optional[Variable]: ... @overload def find_variable(self, name: str) -> Optional[Variable]: ... @property def types(self) -> Iterator[Optional[Type]]: ... @property def functions(self) -> Iterator[Optional[Function]]: ... @property def imported_functions(self) -> Iterator[Optional[Function]]: ... @property def variables(self) -> Iterator[Optional[Variable]]: ... class DebugInfo(lief.DebugInfo): @overload def find_function(self, name: str) -> Optional[Function]: ... @overload def find_function(self, addr: int) -> Optional[Function]: ... @overload def find_variable(self, addr: int) -> Optional[Variable]: ... @overload def find_variable(self, name: str) -> Optional[Variable]: ... def find_type(self, name: str) -> Optional[Type]: ... @property def compilation_units(self) -> Iterator[Optional[CompilationUnit]]: ... class Editor: class ARCH(enum.Enum): UNKNOWN = 0 X64 = 1 X86 = 2 AARCH64 = 3 ARM = 4 class FORMAT(enum.Enum): ELF = 0 PE = 2 MACHO = 1 @staticmethod def from_binary(bin: lief.Binary) -> Optional[Editor]: ... @staticmethod def create(fmt: Editor.FORMAT, arch: Editor.ARCH) -> Optional[Editor]: ... def create_compilation_unit(self) -> Optional[editor.CompilationUnit]: ... def write(self, output: Union[str | os.PathLike]) -> None: ... class LexicalBlock: @property def name(self) -> str: ... @property def description(self) -> str: ... @property def sub_blocks(self) -> Iterator[Optional[LexicalBlock]]: ... @property def addr(self) -> int | None: ... @property def size(self) -> int: ... @property def low_pc(self) -> int | None: ... @property def high_pc(self) -> int | None: ... @property def ranges(self) -> list[lief.range_t]: ...