16bff2d51SMed Ismail Bennanifrom abc import ABCMeta, abstractmethod 26bff2d51SMed Ismail Bennani 36bff2d51SMed Ismail Bennaniimport lldb 46bff2d51SMed Ismail Bennani 56bff2d51SMed Ismail Bennani 66bff2d51SMed Ismail Bennaniclass ScriptedPlatform(metaclass=ABCMeta): 76bff2d51SMed Ismail Bennani 86bff2d51SMed Ismail Bennani """ 96bff2d51SMed Ismail Bennani The base class for a scripted platform. 106bff2d51SMed Ismail Bennani 116bff2d51SMed Ismail Bennani Most of the base class methods are `@abstractmethod` that need to be 126bff2d51SMed Ismail Bennani overwritten by the inheriting class. 136bff2d51SMed Ismail Bennani """ 146bff2d51SMed Ismail Bennani 156bff2d51SMed Ismail Bennani processes = None 166bff2d51SMed Ismail Bennani 176bff2d51SMed Ismail Bennani @abstractmethod 186bff2d51SMed Ismail Bennani def __init__(self, exe_ctx, args): 196bff2d51SMed Ismail Bennani """Construct a scripted platform. 206bff2d51SMed Ismail Bennani 216bff2d51SMed Ismail Bennani Args: 226bff2d51SMed Ismail Bennani exe_ctx (lldb.SBExecutionContext): The execution context for the scripted platform 236bff2d51SMed Ismail Bennani args (lldb.SBStructuredData): A Dictionary holding arbitrary 246bff2d51SMed Ismail Bennani key/value pairs used by the scripted platform. 256bff2d51SMed Ismail Bennani """ 266bff2d51SMed Ismail Bennani processes = [] 276bff2d51SMed Ismail Bennani 286bff2d51SMed Ismail Bennani @abstractmethod 296bff2d51SMed Ismail Bennani def list_processes(self): 306bff2d51SMed Ismail Bennani """Get a list of processes that are running or that can be attached to on the platform. 316bff2d51SMed Ismail Bennani 32*59f4267cSMed Ismail Bennani .. code-block:: python 33*59f4267cSMed Ismail Bennani 346bff2d51SMed Ismail Bennani processes = { 356bff2d51SMed Ismail Bennani 420: { 366bff2d51SMed Ismail Bennani name: a.out, 376bff2d51SMed Ismail Bennani arch: aarch64, 386bff2d51SMed Ismail Bennani pid: 420, 396bff2d51SMed Ismail Bennani parent_pid: 42 (optional), 406bff2d51SMed Ismail Bennani uid: 0 (optional), 416bff2d51SMed Ismail Bennani gid: 0 (optional), 426bff2d51SMed Ismail Bennani }, 436bff2d51SMed Ismail Bennani } 446bff2d51SMed Ismail Bennani 456bff2d51SMed Ismail Bennani Returns: 466bff2d51SMed Ismail Bennani Dict: The processes represented as a dictionary, with at least the 476bff2d51SMed Ismail Bennani process ID, name, architecture. Optionally, the user can also 486bff2d51SMed Ismail Bennani provide the parent process ID and the user and group IDs. 496bff2d51SMed Ismail Bennani The dictionary can be empty. 506bff2d51SMed Ismail Bennani """ 516bff2d51SMed Ismail Bennani pass 526bff2d51SMed Ismail Bennani 536bff2d51SMed Ismail Bennani def get_process_info(self, pid): 546bff2d51SMed Ismail Bennani """Get the dictionary describing the process. 556bff2d51SMed Ismail Bennani 566bff2d51SMed Ismail Bennani Returns: 576bff2d51SMed Ismail Bennani Dict: The dictionary of process info that matched process ID. 586bff2d51SMed Ismail Bennani None if the process doesn't exists 596bff2d51SMed Ismail Bennani """ 606bff2d51SMed Ismail Bennani pass 616bff2d51SMed Ismail Bennani 626bff2d51SMed Ismail Bennani @abstractmethod 636bff2d51SMed Ismail Bennani def attach_to_process(self, attach_info): 646bff2d51SMed Ismail Bennani """Attach to a process. 656bff2d51SMed Ismail Bennani 666bff2d51SMed Ismail Bennani Args: 676bff2d51SMed Ismail Bennani attach_info (lldb.SBAttachInfo): The information related to attach to a process. 686bff2d51SMed Ismail Bennani 696bff2d51SMed Ismail Bennani Returns: 706bff2d51SMed Ismail Bennani lldb.SBError: A status object notifying if the attach succeeded. 716bff2d51SMed Ismail Bennani """ 726bff2d51SMed Ismail Bennani pass 736bff2d51SMed Ismail Bennani 746bff2d51SMed Ismail Bennani @abstractmethod 756bff2d51SMed Ismail Bennani def launch_process(self, launch_info): 766bff2d51SMed Ismail Bennani """Launch a process. 776bff2d51SMed Ismail Bennani 786bff2d51SMed Ismail Bennani Args: 796bff2d51SMed Ismail Bennani launch_info (lldb.SBLaunchInfo): The information related to the process launch. 806bff2d51SMed Ismail Bennani 816bff2d51SMed Ismail Bennani Returns: 826bff2d51SMed Ismail Bennani lldb.SBError: A status object notifying if the launch succeeded. 836bff2d51SMed Ismail Bennani """ 846bff2d51SMed Ismail Bennani pass 856bff2d51SMed Ismail Bennani 866bff2d51SMed Ismail Bennani @abstractmethod 876bff2d51SMed Ismail Bennani def kill_process(self, pid): 886bff2d51SMed Ismail Bennani """Kill a process. 896bff2d51SMed Ismail Bennani 906bff2d51SMed Ismail Bennani Args: 916bff2d51SMed Ismail Bennani pid (int): Process ID for the process to be killed. 926bff2d51SMed Ismail Bennani 936bff2d51SMed Ismail Bennani Returns: 946bff2d51SMed Ismail Bennani lldb.SBError: A status object notifying if the shutdown succeeded. 956bff2d51SMed Ismail Bennani """ 966bff2d51SMed Ismail Bennani pass 97