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