97 lines
2.7 KiB
Python
97 lines
2.7 KiB
Python
from abc import ABCMeta, abstractmethod
|
|
|
|
import lldb
|
|
|
|
|
|
class ScriptedPlatform(metaclass=ABCMeta):
|
|
|
|
"""
|
|
The base class for a scripted platform.
|
|
|
|
Most of the base class methods are `@abstractmethod` that need to be
|
|
overwritten by the inheriting class.
|
|
|
|
DISCLAIMER: THIS INTERFACE IS STILL UNDER DEVELOPMENT AND NOT STABLE.
|
|
THE METHODS EXPOSED MIGHT CHANGE IN THE FUTURE.
|
|
"""
|
|
|
|
processes = None
|
|
|
|
@abstractmethod
|
|
def __init__(self, exe_ctx, args):
|
|
"""Construct a scripted platform.
|
|
|
|
Args:
|
|
exe_ctx (lldb.SBExecutionContext): The execution context for the scripted platform
|
|
args (lldb.SBStructuredData): A Dictionary holding arbitrary
|
|
key/value pairs used by the scripted platform.
|
|
"""
|
|
processes = []
|
|
|
|
@abstractmethod
|
|
def list_processes(self):
|
|
"""Get a list of processes that are running or that can be attached to on the platform.
|
|
|
|
processes = {
|
|
420: {
|
|
name: a.out,
|
|
arch: aarch64,
|
|
pid: 420,
|
|
parent_pid: 42 (optional),
|
|
uid: 0 (optional),
|
|
gid: 0 (optional),
|
|
},
|
|
}
|
|
|
|
Returns:
|
|
Dict: The processes represented as a dictionary, with at least the
|
|
process ID, name, architecture. Optionally, the user can also
|
|
provide the parent process ID and the user and group IDs.
|
|
The dictionary can be empty.
|
|
"""
|
|
pass
|
|
|
|
def get_process_info(self, pid):
|
|
"""Get the dictionary describing the process.
|
|
|
|
Returns:
|
|
Dict: The dictionary of process info that matched process ID.
|
|
None if the process doesn't exists
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def attach_to_process(self, attach_info):
|
|
"""Attach to a process.
|
|
|
|
Args:
|
|
attach_info (lldb.SBAttachInfo): The information related to attach to a process.
|
|
|
|
Returns:
|
|
lldb.SBError: A status object notifying if the attach succeeded.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def launch_process(self, launch_info):
|
|
"""Launch a process.
|
|
|
|
Args:
|
|
launch_info (lldb.SBLaunchInfo): The information related to the process launch.
|
|
|
|
Returns:
|
|
lldb.SBError: A status object notifying if the launch succeeded.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def kill_process(self, pid):
|
|
"""Kill a process.
|
|
|
|
Args:
|
|
pid (int): Process ID for the process to be killed.
|
|
|
|
Returns:
|
|
lldb.SBError: A status object notifying if the shutdown succeeded.
|
|
"""
|
|
pass
|