1caea440aSMed Ismail Bennaniimport os,struct, signal 2caea440aSMed Ismail Bennani 3caea440aSMed Ismail Bennanifrom typing import Any, Dict 4caea440aSMed Ismail Bennani 5caea440aSMed Ismail Bennaniimport lldb 6caea440aSMed Ismail Bennanifrom lldb.plugins.scripted_process import ScriptedProcess 7caea440aSMed Ismail Bennanifrom lldb.plugins.scripted_process import ScriptedThread 8caea440aSMed Ismail Bennani 9caea440aSMed Ismail Bennaniclass InvalidScriptedProcess(ScriptedProcess): 10caea440aSMed Ismail Bennani def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData): 11caea440aSMed Ismail Bennani super().__init__(target, args) 12d3e0f7e1SMed Ismail Bennani self.threads[0] = InvalidScriptedThread(self, None) 13caea440aSMed Ismail Bennani 14caea440aSMed Ismail Bennani def get_memory_region_containing_address(self, addr: int) -> lldb.SBMemoryRegionInfo: 15caea440aSMed Ismail Bennani return None 16caea440aSMed Ismail Bennani 17caea440aSMed Ismail Bennani def get_thread_with_id(self, tid: int): 18caea440aSMed Ismail Bennani return {} 19caea440aSMed Ismail Bennani 20caea440aSMed Ismail Bennani def get_registers_for_thread(self, tid: int): 21caea440aSMed Ismail Bennani return {} 22caea440aSMed Ismail Bennani 23caea440aSMed Ismail Bennani def read_memory_at_address(self, addr: int, size: int) -> lldb.SBData: 24caea440aSMed Ismail Bennani return None 25caea440aSMed Ismail Bennani 26caea440aSMed Ismail Bennani def get_loaded_images(self): 27caea440aSMed Ismail Bennani return self.loaded_images 28caea440aSMed Ismail Bennani 29caea440aSMed Ismail Bennani def get_process_id(self) -> int: 30caea440aSMed Ismail Bennani return 666 31caea440aSMed Ismail Bennani 32caea440aSMed Ismail Bennani def should_stop(self) -> bool: 33caea440aSMed Ismail Bennani return True 34caea440aSMed Ismail Bennani 35caea440aSMed Ismail Bennani def is_alive(self) -> bool: 36caea440aSMed Ismail Bennani return True 37caea440aSMed Ismail Bennani 38caea440aSMed Ismail Bennani def get_scripted_thread_plugin(self): 39caea440aSMed Ismail Bennani return InvalidScriptedThread.__module__ + "." + InvalidScriptedThread.__name__ 40caea440aSMed Ismail Bennani 41caea440aSMed Ismail Bennani 42caea440aSMed Ismail Bennaniclass InvalidScriptedThread(ScriptedThread): 43caea440aSMed Ismail Bennani def __init__(self, process, args): 44caea440aSMed Ismail Bennani super().__init__(process, args) 45caea440aSMed Ismail Bennani 46caea440aSMed Ismail Bennani def get_thread_id(self) -> int: 47caea440aSMed Ismail Bennani return 0x19 48caea440aSMed Ismail Bennani 49caea440aSMed Ismail Bennani def get_name(self) -> str: 50caea440aSMed Ismail Bennani return InvalidScriptedThread.__name__ + ".thread-1" 51caea440aSMed Ismail Bennani 52caea440aSMed Ismail Bennani def get_state(self) -> int: 53caea440aSMed Ismail Bennani return lldb.eStateInvalid 54caea440aSMed Ismail Bennani 55caea440aSMed Ismail Bennani def get_stop_reason(self) -> Dict[str, Any]: 56caea440aSMed Ismail Bennani return { "type": lldb.eStopReasonSignal, "data": { 57*f5e5074cSMed Ismail Bennani "signal": signal.SIGTRAP 58caea440aSMed Ismail Bennani } } 59caea440aSMed Ismail Bennani 60caea440aSMed Ismail Bennani def get_register_context(self) -> str: 61caea440aSMed Ismail Bennani return None 62caea440aSMed Ismail Bennani 63caea440aSMed Ismail Bennanidef __lldb_init_module(debugger, dict): 64caea440aSMed Ismail Bennani if not 'SKIP_SCRIPTED_PROCESS_LAUNCH' in os.environ: 65caea440aSMed Ismail Bennani debugger.HandleCommand( 66caea440aSMed Ismail Bennani "process launch -C %s.%s" % (__name__, 67caea440aSMed Ismail Bennani InvalidScriptedProcess.__name__)) 68caea440aSMed Ismail Bennani else: 69caea440aSMed Ismail Bennani print("Name of the class that will manage the scripted process: '%s.%s'" 70caea440aSMed Ismail Bennani % (__name__, InvalidScriptedProcess.__name__)) 71