1import os
2
3import lldb
4from lldb.plugins.scripted_process import ScriptedProcess
5
6class MyScriptedProcess(ScriptedProcess):
7    def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData):
8        super().__init__(target, args)
9
10    def get_memory_region_containing_address(self, addr: int) -> lldb.SBMemoryRegionInfo:
11        return self.memory_regions[0]
12
13    def get_thread_with_id(self, tid: int):
14        return {}
15
16    def get_registers_for_thread(self, tid: int):
17        return {}
18
19    def read_memory_at_address(self, addr: int, size: int) -> lldb.SBData:
20        data = lldb.SBData().CreateDataFromCString(
21                                    self.target.GetByteOrder(),
22                                    self.target.GetCodeByteSize(),
23                                    "Hello, world!")
24        return data
25
26    def get_loaded_images(self):
27        return self.loaded_images
28
29    def get_process_id(self) -> int:
30        return 42
31
32    def should_stop(self) -> bool:
33        return True
34
35    def is_alive(self) -> bool:
36        return True
37
38def __lldb_init_module(debugger, dict):
39    if not 'SKIP_SCRIPTED_PROCESS_LAUNCH' in os.environ:
40        debugger.HandleCommand(
41            "process launch -C %s.%s" % (__name__,
42                                     MyScriptedProcess.__name__))
43    else:
44        print("Name of the class that will manage the scripted process: '%s.%s'"
45                % (__name__, MyScriptedProcess.__name__))