This repository has been archived on 2024-09-30. You can view files and clone it, but cannot push or open issues/pull-requests.
hook-frida/venv/Lib/site-packages/frida_tools/model.py

80 lines
2.6 KiB
Python

class Module:
def __init__(self, name: str, base_address: int, size: int, path: str) -> None:
self.name = name
self.base_address = base_address
self.size = size
self.path = path
def __repr__(self) -> str:
return 'Module(name="%s", base_address=0x%x, size=%d, path="%s")' % (
self.name,
self.base_address,
self.size,
self.path,
)
def __hash__(self) -> int:
return self.base_address.__hash__()
def __eq__(self, other: object) -> bool:
return isinstance(other, Module) and self.base_address == other.base_address
def __ne__(self, other: object) -> bool:
return not (isinstance(other, Module) and self.base_address == other.base_address)
class Function:
def __init__(self, name: str, absolute_address: int) -> None:
self.name = name
self.absolute_address = absolute_address
def __str__(self) -> str:
return self.name
def __repr__(self) -> str:
return 'Function(name="%s", absolute_address=0x%x)' % (self.name, self.absolute_address)
def __hash__(self) -> int:
return self.absolute_address.__hash__()
def __eq__(self, other: object) -> bool:
return isinstance(other, Function) and self.absolute_address == other.absolute_address
def __ne__(self, other: object) -> bool:
return not (isinstance(other, Function) and self.absolute_address == other.absolute_address)
class ModuleFunction(Function):
def __init__(self, module: Module, name: str, relative_address: int, exported: bool) -> None:
super().__init__(name, module.base_address + relative_address)
self.module = module
self.relative_address = relative_address
self.exported = exported
def __repr__(self) -> str:
return 'ModuleFunction(module="%s", name="%s", relative_address=0x%x)' % (
self.module.name,
self.name,
self.relative_address,
)
class ObjCMethod(Function):
def __init__(self, mtype: str, cls: str, method: str, address: int) -> None:
self.mtype = mtype
self.cls = cls
self.method = method
self.address = address
super().__init__(self.display_name(), address)
def display_name(self) -> str:
return "{mtype}[{cls} {method}]".format(mtype=self.mtype, cls=self.cls, method=self.method)
def __repr__(self) -> str:
return 'ObjCMethod(mtype="%s", cls="%s", method="%s", address=0x%x)' % (
self.mtype,
self.cls,
self.method,
self.address,
)