Source code for revenge.plugins.handles.handles


import logging

from prettytable import PrettyTable
from ... import common
from .. import Plugin

[docs]class Handles(Plugin): def __init__(self, process): """Manage process handles. Examples: .. code-block:: python # Grab a specific handle handle = process.handles[4] # Print out details about handles print(process.handles) """ self._process = process
[docs] def values(self): return self._handles.values()
def __len__(self): return len(self._handles) def __repr__(self): return "<Handles " + str(len(self)) + ">" def __iter__(self): return self._handles.__iter__() def __str__(self): table = PrettyTable(["handle", "name"]) table.align = 'l' table.border = False for handle in self.values(): table.add_row([hex(handle.handle), handle.name or ""]) return str(table) def __getitem__(self, item): if isinstance(item, int): return self._handles[item] else: err = "Unhandled handles item of type " + type(item) LOGGER.error(err) raise RevengeInvalidArgumentType(err) @property def _handles(self): """dict: {ID: Handle}""" if self._process.device.platform == "linux": return linux.enumerate_handles(self._process) else: LOGGER.warning("Handles not yet implemented on platform " + self._process.device.platform + ".") return {} @property def _is_valid(self): return True
from . import linux from ...exceptions import * Handles.__doc__ = Handles.__init__.__doc__ LOGGER = logging.getLogger(__name__)