1f3176f5fSMed Ismail Bennanifrom abc import ABCMeta, abstractmethod 2f3176f5fSMed Ismail Bennaniimport six 3f3176f5fSMed Ismail Bennani 4f3176f5fSMed Ismail Bennaniimport lldb 5f3176f5fSMed Ismail Bennani 6f3176f5fSMed Ismail Bennani@six.add_metaclass(ABCMeta) 7f3176f5fSMed Ismail Bennaniclass ScriptedProcess: 8f3176f5fSMed Ismail Bennani 9f3176f5fSMed Ismail Bennani """ 10f3176f5fSMed Ismail Bennani The base class for a scripted process. 11f3176f5fSMed Ismail Bennani 12f3176f5fSMed Ismail Bennani Most of the base class methods are `@abstractmethod` that need to be 13f3176f5fSMed Ismail Bennani overwritten by the inheriting class. 14f3176f5fSMed Ismail Bennani 15f3176f5fSMed Ismail Bennani DISCLAIMER: THIS INTERFACE IS STILL UNDER DEVELOPMENT AND NOT STABLE. 16f3176f5fSMed Ismail Bennani THE METHODS EXPOSED MIGHT CHANGE IN THE FUTURE. 17f3176f5fSMed Ismail Bennani """ 18f3176f5fSMed Ismail Bennani 19a758c9f7SMed Ismail Bennani memory_regions = None 20a758c9f7SMed Ismail Bennani stack_memory_dump = None 21a758c9f7SMed Ismail Bennani loaded_images = None 224858fe04SMed Ismail Bennani threads = {} 23a758c9f7SMed Ismail Bennani 24f3176f5fSMed Ismail Bennani @abstractmethod 25f3176f5fSMed Ismail Bennani def __init__(self, target, args): 26f3176f5fSMed Ismail Bennani """ Construct a scripted process. 27f3176f5fSMed Ismail Bennani 28f3176f5fSMed Ismail Bennani Args: 29f3176f5fSMed Ismail Bennani target (lldb.SBTarget): The target launching the scripted process. 30f3176f5fSMed Ismail Bennani args (lldb.SBStructuredData): A Dictionary holding arbitrary 31f3176f5fSMed Ismail Bennani key/value pairs used by the scripted process. 32f3176f5fSMed Ismail Bennani """ 33f3176f5fSMed Ismail Bennani self.target = None 34f3176f5fSMed Ismail Bennani self.args = None 35f5e5074cSMed Ismail Bennani self.arch = None 36f3176f5fSMed Ismail Bennani if isinstance(target, lldb.SBTarget) and target.IsValid(): 37f3176f5fSMed Ismail Bennani self.target = target 38f5e5074cSMed Ismail Bennani triple = self.target.triple 39f5e5074cSMed Ismail Bennani if triple: 40f5e5074cSMed Ismail Bennani self.arch = triple.split('-')[0] 41*c30742baSMed Ismail Bennani self.dbg = target.GetDebugger() 42f3176f5fSMed Ismail Bennani if isinstance(args, lldb.SBStructuredData) and args.IsValid(): 43f3176f5fSMed Ismail Bennani self.args = args 44f3176f5fSMed Ismail Bennani 45f3176f5fSMed Ismail Bennani @abstractmethod 46976867b5SMed Ismail Bennani def get_memory_region_containing_address(self, addr): 47f3176f5fSMed Ismail Bennani """ Get the memory region for the scripted process, containing a 48f3176f5fSMed Ismail Bennani specific address. 49f3176f5fSMed Ismail Bennani 50f3176f5fSMed Ismail Bennani Args: 51f3176f5fSMed Ismail Bennani addr (int): Address to look for in the scripted process memory 52f3176f5fSMed Ismail Bennani regions. 53f3176f5fSMed Ismail Bennani 54f3176f5fSMed Ismail Bennani Returns: 55f3176f5fSMed Ismail Bennani lldb.SBMemoryRegionInfo: The memory region containing the address. 56f3176f5fSMed Ismail Bennani None if out of bounds. 57f3176f5fSMed Ismail Bennani """ 58f3176f5fSMed Ismail Bennani pass 59f3176f5fSMed Ismail Bennani 604858fe04SMed Ismail Bennani def get_threads_info(self): 614858fe04SMed Ismail Bennani """ Get the dictionary describing the process' Scripted Threads. 624858fe04SMed Ismail Bennani 634858fe04SMed Ismail Bennani Returns: 644858fe04SMed Ismail Bennani Dict: The dictionary of threads, with the thread ID as the key and 654858fe04SMed Ismail Bennani a Scripted Thread instance as the value. 664858fe04SMed Ismail Bennani The dictionary can be empty. 674858fe04SMed Ismail Bennani """ 684858fe04SMed Ismail Bennani return self.threads 694858fe04SMed Ismail Bennani 70f3176f5fSMed Ismail Bennani @abstractmethod 71976867b5SMed Ismail Bennani def get_thread_with_id(self, tid): 72f3176f5fSMed Ismail Bennani """ Get the scripted process thread with a specific ID. 73f3176f5fSMed Ismail Bennani 74f3176f5fSMed Ismail Bennani Args: 75f3176f5fSMed Ismail Bennani tid (int): Thread ID to look for in the scripted process. 76f3176f5fSMed Ismail Bennani 77f3176f5fSMed Ismail Bennani Returns: 78d3e0f7e1SMed Ismail Bennani Dict: The thread represented as a dictionary, with the 79f3176f5fSMed Ismail Bennani tid thread ID. None if tid doesn't match any of the scripted 80f3176f5fSMed Ismail Bennani process threads. 81f3176f5fSMed Ismail Bennani """ 82f3176f5fSMed Ismail Bennani pass 83f3176f5fSMed Ismail Bennani 84f3176f5fSMed Ismail Bennani @abstractmethod 85976867b5SMed Ismail Bennani def get_registers_for_thread(self, tid): 86f3176f5fSMed Ismail Bennani """ Get the register context dictionary for a certain thread of 87f3176f5fSMed Ismail Bennani the scripted process. 88f3176f5fSMed Ismail Bennani 89f3176f5fSMed Ismail Bennani Args: 90f3176f5fSMed Ismail Bennani tid (int): Thread ID for the thread's register context. 91f3176f5fSMed Ismail Bennani 92f3176f5fSMed Ismail Bennani Returns: 93f3176f5fSMed Ismail Bennani Dict: The register context represented as a dictionary, for the 94f3176f5fSMed Ismail Bennani tid thread. None if tid doesn't match any of the scripted 95f3176f5fSMed Ismail Bennani process threads. 96f3176f5fSMed Ismail Bennani """ 97f3176f5fSMed Ismail Bennani pass 98f3176f5fSMed Ismail Bennani 99f3176f5fSMed Ismail Bennani @abstractmethod 100976867b5SMed Ismail Bennani def read_memory_at_address(self, addr, size): 101f3176f5fSMed Ismail Bennani """ Get a memory buffer from the scripted process at a certain address, 102f3176f5fSMed Ismail Bennani of a certain size. 103f3176f5fSMed Ismail Bennani 104f3176f5fSMed Ismail Bennani Args: 105f3176f5fSMed Ismail Bennani addr (int): Address from which we should start reading. 106f3176f5fSMed Ismail Bennani size (int): Size of the memory to read. 107f3176f5fSMed Ismail Bennani 108f3176f5fSMed Ismail Bennani Returns: 109f3176f5fSMed Ismail Bennani lldb.SBData: An `lldb.SBData` buffer with the target byte size and 110f3176f5fSMed Ismail Bennani byte order storing the memory read. 111f3176f5fSMed Ismail Bennani """ 112f3176f5fSMed Ismail Bennani pass 113f3176f5fSMed Ismail Bennani 114f3176f5fSMed Ismail Bennani def get_loaded_images(self): 115f3176f5fSMed Ismail Bennani """ Get the list of loaded images for the scripted process. 116f3176f5fSMed Ismail Bennani 117f3176f5fSMed Ismail Bennani ``` 118f3176f5fSMed Ismail Bennani class ScriptedProcessImage: 119f3176f5fSMed Ismail Bennani def __init__(name, file_spec, uuid, load_address): 120f3176f5fSMed Ismail Bennani self.name = name 121f3176f5fSMed Ismail Bennani self.file_spec = file_spec 122f3176f5fSMed Ismail Bennani self.uuid = uuid 123f3176f5fSMed Ismail Bennani self.load_address = load_address 124f3176f5fSMed Ismail Bennani ``` 125f3176f5fSMed Ismail Bennani 126f3176f5fSMed Ismail Bennani Returns: 127f3176f5fSMed Ismail Bennani List[ScriptedProcessImage]: A list of `ScriptedProcessImage` 128f3176f5fSMed Ismail Bennani containing for each entry, the name of the library, a UUID, 129f3176f5fSMed Ismail Bennani an `lldb.SBFileSpec` and a load address. 130f3176f5fSMed Ismail Bennani None if the list is empty. 131f3176f5fSMed Ismail Bennani """ 132a758c9f7SMed Ismail Bennani return self.loaded_images 133f3176f5fSMed Ismail Bennani 134f3176f5fSMed Ismail Bennani def get_process_id(self): 135f3176f5fSMed Ismail Bennani """ Get the scripted process identifier. 136f3176f5fSMed Ismail Bennani 137f3176f5fSMed Ismail Bennani Returns: 138f3176f5fSMed Ismail Bennani int: The scripted process identifier. 139f3176f5fSMed Ismail Bennani """ 140f3176f5fSMed Ismail Bennani return 0 141f3176f5fSMed Ismail Bennani 142f3176f5fSMed Ismail Bennani 143f3176f5fSMed Ismail Bennani def launch(self): 144f3176f5fSMed Ismail Bennani """ Simulate the scripted process launch. 145f3176f5fSMed Ismail Bennani 146f3176f5fSMed Ismail Bennani Returns: 147f3176f5fSMed Ismail Bennani lldb.SBError: An `lldb.SBError` with error code 0. 148f3176f5fSMed Ismail Bennani """ 149f3176f5fSMed Ismail Bennani return lldb.SBError() 150f3176f5fSMed Ismail Bennani 151f3176f5fSMed Ismail Bennani def resume(self): 152f3176f5fSMed Ismail Bennani """ Simulate the scripted process resume. 153f3176f5fSMed Ismail Bennani 154f3176f5fSMed Ismail Bennani Returns: 155f3176f5fSMed Ismail Bennani lldb.SBError: An `lldb.SBError` with error code 0. 156f3176f5fSMed Ismail Bennani """ 157f3176f5fSMed Ismail Bennani return lldb.SBError() 158f3176f5fSMed Ismail Bennani 159f3176f5fSMed Ismail Bennani @abstractmethod 160312b43daSMed Ismail Bennani def should_stop(self): 161312b43daSMed Ismail Bennani """ Check if the scripted process plugin should produce the stop event. 162312b43daSMed Ismail Bennani 163312b43daSMed Ismail Bennani Returns: 164312b43daSMed Ismail Bennani bool: True if scripted process should broadcast a stop event. 165312b43daSMed Ismail Bennani False otherwise. 166312b43daSMed Ismail Bennani """ 167312b43daSMed Ismail Bennani pass 168312b43daSMed Ismail Bennani 169312b43daSMed Ismail Bennani def stop(self): 170312b43daSMed Ismail Bennani """ Trigger the scripted process stop. 171312b43daSMed Ismail Bennani 172312b43daSMed Ismail Bennani Returns: 173312b43daSMed Ismail Bennani lldb.SBError: An `lldb.SBError` with error code 0. 174312b43daSMed Ismail Bennani """ 175312b43daSMed Ismail Bennani return lldb.SBError() 176312b43daSMed Ismail Bennani 177312b43daSMed Ismail Bennani @abstractmethod 178f3176f5fSMed Ismail Bennani def is_alive(self): 179f3176f5fSMed Ismail Bennani """ Check if the scripted process is alive. 180f3176f5fSMed Ismail Bennani 181f3176f5fSMed Ismail Bennani Returns: 182f3176f5fSMed Ismail Bennani bool: True if scripted process is alive. False otherwise. 183f3176f5fSMed Ismail Bennani """ 184f3176f5fSMed Ismail Bennani pass 18559d8dd79SMed Ismail Bennani 18659d8dd79SMed Ismail Bennani @abstractmethod 18759d8dd79SMed Ismail Bennani def get_scripted_thread_plugin(self): 18859d8dd79SMed Ismail Bennani """ Get scripted thread plugin name. 18959d8dd79SMed Ismail Bennani 19059d8dd79SMed Ismail Bennani Returns: 19159d8dd79SMed Ismail Bennani str: Name of the scripted thread plugin. 19259d8dd79SMed Ismail Bennani """ 19359d8dd79SMed Ismail Bennani return None 19459d8dd79SMed Ismail Bennani 19559d8dd79SMed Ismail Bennani@six.add_metaclass(ABCMeta) 19659d8dd79SMed Ismail Bennaniclass ScriptedThread: 19759d8dd79SMed Ismail Bennani 19859d8dd79SMed Ismail Bennani """ 19959d8dd79SMed Ismail Bennani The base class for a scripted thread. 20059d8dd79SMed Ismail Bennani 20159d8dd79SMed Ismail Bennani Most of the base class methods are `@abstractmethod` that need to be 20259d8dd79SMed Ismail Bennani overwritten by the inheriting class. 20359d8dd79SMed Ismail Bennani 20459d8dd79SMed Ismail Bennani DISCLAIMER: THIS INTERFACE IS STILL UNDER DEVELOPMENT AND NOT STABLE. 20559d8dd79SMed Ismail Bennani THE METHODS EXPOSED MIGHT CHANGE IN THE FUTURE. 20659d8dd79SMed Ismail Bennani """ 20759d8dd79SMed Ismail Bennani 20859d8dd79SMed Ismail Bennani @abstractmethod 209f5e5074cSMed Ismail Bennani def __init__(self, scripted_process, args): 21059d8dd79SMed Ismail Bennani """ Construct a scripted thread. 21159d8dd79SMed Ismail Bennani 21259d8dd79SMed Ismail Bennani Args: 213f5e5074cSMed Ismail Bennani process (ScriptedProcess): The scripted process owning this thread. 21459d8dd79SMed Ismail Bennani args (lldb.SBStructuredData): A Dictionary holding arbitrary 215738621d0SMed Ismail Bennani key/value pairs used by the scripted thread. 21659d8dd79SMed Ismail Bennani """ 21759d8dd79SMed Ismail Bennani self.target = None 218f5e5074cSMed Ismail Bennani self.scripted_process = None 219738621d0SMed Ismail Bennani self.process = None 22059d8dd79SMed Ismail Bennani self.args = None 22159d8dd79SMed Ismail Bennani 22259d8dd79SMed Ismail Bennani self.id = None 223d3e0f7e1SMed Ismail Bennani self.idx = None 22459d8dd79SMed Ismail Bennani self.name = None 22559d8dd79SMed Ismail Bennani self.queue = None 22659d8dd79SMed Ismail Bennani self.state = None 22759d8dd79SMed Ismail Bennani self.stop_reason = None 22859d8dd79SMed Ismail Bennani self.register_info = None 229976867b5SMed Ismail Bennani self.register_ctx = {} 23059d8dd79SMed Ismail Bennani self.frames = [] 23159d8dd79SMed Ismail Bennani 232*c30742baSMed Ismail Bennani if isinstance(scripted_process, ScriptedProcess): 233*c30742baSMed Ismail Bennani self.target = scripted_process.target 234*c30742baSMed Ismail Bennani self.scripted_process = scripted_process 235*c30742baSMed Ismail Bennani self.process = self.target.GetProcess() 236*c30742baSMed Ismail Bennani self.get_register_info() 237*c30742baSMed Ismail Bennani 238*c30742baSMed Ismail Bennani 23959d8dd79SMed Ismail Bennani @abstractmethod 24059d8dd79SMed Ismail Bennani def get_thread_id(self): 24159d8dd79SMed Ismail Bennani """ Get the scripted thread identifier. 24259d8dd79SMed Ismail Bennani 24359d8dd79SMed Ismail Bennani Returns: 24459d8dd79SMed Ismail Bennani int: The identifier of the scripted thread. 24559d8dd79SMed Ismail Bennani """ 24659d8dd79SMed Ismail Bennani pass 24759d8dd79SMed Ismail Bennani 24859d8dd79SMed Ismail Bennani @abstractmethod 24959d8dd79SMed Ismail Bennani def get_name(self): 25059d8dd79SMed Ismail Bennani """ Get the scripted thread name. 25159d8dd79SMed Ismail Bennani 25259d8dd79SMed Ismail Bennani Returns: 25359d8dd79SMed Ismail Bennani str: The name of the scripted thread. 25459d8dd79SMed Ismail Bennani """ 25559d8dd79SMed Ismail Bennani pass 25659d8dd79SMed Ismail Bennani 25759d8dd79SMed Ismail Bennani def get_state(self): 25859d8dd79SMed Ismail Bennani """ Get the scripted thread state type. 25959d8dd79SMed Ismail Bennani 26059d8dd79SMed Ismail Bennani eStateStopped, ///< Process or thread is stopped and can be examined. 26159d8dd79SMed Ismail Bennani eStateRunning, ///< Process or thread is running and can't be examined. 26259d8dd79SMed Ismail Bennani eStateStepping, ///< Process or thread is in the process of stepping and can 26359d8dd79SMed Ismail Bennani /// not be examined. 264*c30742baSMed Ismail Bennani eStateCrashed, ///< Process or thread has crashed and can be examined. 26559d8dd79SMed Ismail Bennani 26659d8dd79SMed Ismail Bennani Returns: 26759d8dd79SMed Ismail Bennani int: The state type of the scripted thread. 26859d8dd79SMed Ismail Bennani Returns lldb.eStateStopped by default. 26959d8dd79SMed Ismail Bennani """ 27059d8dd79SMed Ismail Bennani return lldb.eStateStopped 27159d8dd79SMed Ismail Bennani 27259d8dd79SMed Ismail Bennani def get_queue(self): 27359d8dd79SMed Ismail Bennani """ Get the scripted thread associated queue name. 27459d8dd79SMed Ismail Bennani This method is optional. 27559d8dd79SMed Ismail Bennani 27659d8dd79SMed Ismail Bennani Returns: 27759d8dd79SMed Ismail Bennani str: The queue name associated with the scripted thread. 27859d8dd79SMed Ismail Bennani """ 27959d8dd79SMed Ismail Bennani pass 28059d8dd79SMed Ismail Bennani 28159d8dd79SMed Ismail Bennani @abstractmethod 28259d8dd79SMed Ismail Bennani def get_stop_reason(self): 28359d8dd79SMed Ismail Bennani """ Get the dictionary describing the stop reason type with some data. 28459d8dd79SMed Ismail Bennani This method is optional. 28559d8dd79SMed Ismail Bennani 28659d8dd79SMed Ismail Bennani Returns: 28759d8dd79SMed Ismail Bennani Dict: The dictionary holding the stop reason type and the possibly 28859d8dd79SMed Ismail Bennani the stop reason data. 28959d8dd79SMed Ismail Bennani """ 29059d8dd79SMed Ismail Bennani pass 29159d8dd79SMed Ismail Bennani 29259d8dd79SMed Ismail Bennani def get_stackframes(self): 29359d8dd79SMed Ismail Bennani """ Get the list of stack frames for the scripted thread. 29459d8dd79SMed Ismail Bennani 29559d8dd79SMed Ismail Bennani ``` 29659d8dd79SMed Ismail Bennani class ScriptedStackFrame: 29759d8dd79SMed Ismail Bennani def __init__(idx, cfa, pc, symbol_ctx): 29859d8dd79SMed Ismail Bennani self.idx = idx 29959d8dd79SMed Ismail Bennani self.cfa = cfa 30059d8dd79SMed Ismail Bennani self.pc = pc 30159d8dd79SMed Ismail Bennani self.symbol_ctx = symbol_ctx 30259d8dd79SMed Ismail Bennani ``` 30359d8dd79SMed Ismail Bennani 30459d8dd79SMed Ismail Bennani Returns: 30559d8dd79SMed Ismail Bennani List[ScriptedFrame]: A list of `ScriptedStackFrame` 30659d8dd79SMed Ismail Bennani containing for each entry, the frame index, the canonical 30759d8dd79SMed Ismail Bennani frame address, the program counter value for that frame 30859d8dd79SMed Ismail Bennani and a symbol context. 30959d8dd79SMed Ismail Bennani None if the list is empty. 31059d8dd79SMed Ismail Bennani """ 31159d8dd79SMed Ismail Bennani return 0 31259d8dd79SMed Ismail Bennani 31359d8dd79SMed Ismail Bennani def get_register_info(self): 31459d8dd79SMed Ismail Bennani if self.register_info is None: 31559d8dd79SMed Ismail Bennani self.register_info = dict() 316f5e5074cSMed Ismail Bennani if self.scripted_process.arch == 'x86_64': 317976867b5SMed Ismail Bennani self.register_info['sets'] = ['General Purpose Registers'] 318f5e5074cSMed Ismail Bennani self.register_info['registers'] = INTEL64_GPR 319f5e5074cSMed Ismail Bennani elif 'arm64' in self.scripted_process.arch: 320caea440aSMed Ismail Bennani self.register_info['sets'] = ['General Purpose Registers'] 321f5e5074cSMed Ismail Bennani self.register_info['registers'] = ARM64_GPR 322f5e5074cSMed Ismail Bennani else: raise ValueError('Unknown architecture', self.scripted_process.arch) 323f5e5074cSMed Ismail Bennani return self.register_info 324f5e5074cSMed Ismail Bennani 325f5e5074cSMed Ismail Bennani @abstractmethod 326f5e5074cSMed Ismail Bennani def get_register_context(self): 327f5e5074cSMed Ismail Bennani """ Get the scripted thread register context 328f5e5074cSMed Ismail Bennani 329f5e5074cSMed Ismail Bennani Returns: 330f5e5074cSMed Ismail Bennani str: A byte representing all register's value. 331f5e5074cSMed Ismail Bennani """ 332f5e5074cSMed Ismail Bennani pass 333f5e5074cSMed Ismail Bennani 334f5e5074cSMed Ismail BennaniARM64_GPR = [ {'name': 'x0', 'bitsize': 64, 'offset': 0, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 0, 'dwarf': 0, 'generic': 'arg0', 'alt-name': 'arg0'}, 335caea440aSMed Ismail Bennani {'name': 'x1', 'bitsize': 64, 'offset': 8, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 1, 'dwarf': 1, 'generic': 'arg1', 'alt-name': 'arg1'}, 336caea440aSMed Ismail Bennani {'name': 'x2', 'bitsize': 64, 'offset': 16, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 2, 'dwarf': 2, 'generic': 'arg2', 'alt-name': 'arg2'}, 337caea440aSMed Ismail Bennani {'name': 'x3', 'bitsize': 64, 'offset': 24, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 3, 'dwarf': 3, 'generic': 'arg3', 'alt-name': 'arg3'}, 338caea440aSMed Ismail Bennani {'name': 'x4', 'bitsize': 64, 'offset': 32, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 4, 'dwarf': 4, 'generic': 'arg4', 'alt-name': 'arg4'}, 339caea440aSMed Ismail Bennani {'name': 'x5', 'bitsize': 64, 'offset': 40, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 5, 'dwarf': 5, 'generic': 'arg5', 'alt-name': 'arg5'}, 340caea440aSMed Ismail Bennani {'name': 'x6', 'bitsize': 64, 'offset': 48, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 6, 'dwarf': 6, 'generic': 'arg6', 'alt-name': 'arg6'}, 341caea440aSMed Ismail Bennani {'name': 'x7', 'bitsize': 64, 'offset': 56, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 7, 'dwarf': 7, 'generic': 'arg7', 'alt-name': 'arg7'}, 342caea440aSMed Ismail Bennani {'name': 'x8', 'bitsize': 64, 'offset': 64, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 8, 'dwarf': 8 }, 343caea440aSMed Ismail Bennani {'name': 'x9', 'bitsize': 64, 'offset': 72, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 9, 'dwarf': 9 }, 344caea440aSMed Ismail Bennani {'name': 'x10', 'bitsize': 64, 'offset': 80, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 10, 'dwarf': 10}, 345caea440aSMed Ismail Bennani {'name': 'x11', 'bitsize': 64, 'offset': 88, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 11, 'dwarf': 11}, 346caea440aSMed Ismail Bennani {'name': 'x12', 'bitsize': 64, 'offset': 96, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 12, 'dwarf': 12}, 347caea440aSMed Ismail Bennani {'name': 'x13', 'bitsize': 64, 'offset': 104, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 13, 'dwarf': 13}, 348caea440aSMed Ismail Bennani {'name': 'x14', 'bitsize': 64, 'offset': 112, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 14, 'dwarf': 14}, 349caea440aSMed Ismail Bennani {'name': 'x15', 'bitsize': 64, 'offset': 120, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 15, 'dwarf': 15}, 350caea440aSMed Ismail Bennani {'name': 'x16', 'bitsize': 64, 'offset': 128, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 16, 'dwarf': 16}, 351caea440aSMed Ismail Bennani {'name': 'x17', 'bitsize': 64, 'offset': 136, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 17, 'dwarf': 17}, 352caea440aSMed Ismail Bennani {'name': 'x18', 'bitsize': 64, 'offset': 144, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 18, 'dwarf': 18}, 353caea440aSMed Ismail Bennani {'name': 'x19', 'bitsize': 64, 'offset': 152, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 19, 'dwarf': 19}, 354caea440aSMed Ismail Bennani {'name': 'x20', 'bitsize': 64, 'offset': 160, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 20, 'dwarf': 20}, 355caea440aSMed Ismail Bennani {'name': 'x21', 'bitsize': 64, 'offset': 168, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 21, 'dwarf': 21}, 356caea440aSMed Ismail Bennani {'name': 'x22', 'bitsize': 64, 'offset': 176, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 22, 'dwarf': 22}, 357caea440aSMed Ismail Bennani {'name': 'x23', 'bitsize': 64, 'offset': 184, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 23, 'dwarf': 23}, 358caea440aSMed Ismail Bennani {'name': 'x24', 'bitsize': 64, 'offset': 192, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 24, 'dwarf': 24}, 359caea440aSMed Ismail Bennani {'name': 'x25', 'bitsize': 64, 'offset': 200, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 25, 'dwarf': 25}, 360caea440aSMed Ismail Bennani {'name': 'x26', 'bitsize': 64, 'offset': 208, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 26, 'dwarf': 26}, 361caea440aSMed Ismail Bennani {'name': 'x27', 'bitsize': 64, 'offset': 216, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 27, 'dwarf': 27}, 362caea440aSMed Ismail Bennani {'name': 'x28', 'bitsize': 64, 'offset': 224, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 28, 'dwarf': 28}, 363caea440aSMed Ismail Bennani {'name': 'x29', 'bitsize': 64, 'offset': 232, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 29, 'dwarf': 29, 'generic': 'fp', 'alt-name': 'fp'}, 364caea440aSMed Ismail Bennani {'name': 'x30', 'bitsize': 64, 'offset': 240, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 30, 'dwarf': 30, 'generic': 'lr', 'alt-name': 'lr'}, 365caea440aSMed Ismail Bennani {'name': 'sp', 'bitsize': 64, 'offset': 248, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 31, 'dwarf': 31, 'generic': 'sp', 'alt-name': 'sp'}, 366caea440aSMed Ismail Bennani {'name': 'pc', 'bitsize': 64, 'offset': 256, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 32, 'dwarf': 32, 'generic': 'pc', 'alt-name': 'pc'}, 367caea440aSMed Ismail Bennani {'name': 'cpsr', 'bitsize': 32, 'offset': 264, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 33, 'dwarf': 33} 368caea440aSMed Ismail Bennani ] 36959d8dd79SMed Ismail Bennani 370f5e5074cSMed Ismail BennaniINTEL64_GPR = [ {'name': 'rax', 'bitsize': 64, 'offset': 0, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 0, 'dwarf': 0}, 371f5e5074cSMed Ismail Bennani {'name': 'rbx', 'bitsize': 64, 'offset': 8, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 3, 'dwarf': 3}, 372f5e5074cSMed Ismail Bennani {'name': 'rcx', 'bitsize': 64, 'offset': 16, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 2, 'dwarf': 2, 'generic': 'arg4', 'alt-name': 'arg4'}, 373f5e5074cSMed Ismail Bennani {'name': 'rdx', 'bitsize': 64, 'offset': 24, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 1, 'dwarf': 1, 'generic': 'arg3', 'alt-name': 'arg3'}, 374f5e5074cSMed Ismail Bennani {'name': 'rdi', 'bitsize': 64, 'offset': 32, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 5, 'dwarf': 5, 'generic': 'arg1', 'alt-name': 'arg1'}, 375f5e5074cSMed Ismail Bennani {'name': 'rsi', 'bitsize': 64, 'offset': 40, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 4, 'dwarf': 4, 'generic': 'arg2', 'alt-name': 'arg2'}, 376f5e5074cSMed Ismail Bennani {'name': 'rbp', 'bitsize': 64, 'offset': 48, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 6, 'dwarf': 6, 'generic': 'fp', 'alt-name': 'fp'}, 377f5e5074cSMed Ismail Bennani {'name': 'rsp', 'bitsize': 64, 'offset': 56, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 7, 'dwarf': 7, 'generic': 'sp', 'alt-name': 'sp'}, 378f5e5074cSMed Ismail Bennani {'name': 'r8', 'bitsize': 64, 'offset': 64, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 8, 'dwarf': 8, 'generic': 'arg5', 'alt-name': 'arg5'}, 379f5e5074cSMed Ismail Bennani {'name': 'r9', 'bitsize': 64, 'offset': 72, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 9, 'dwarf': 9, 'generic': 'arg6', 'alt-name': 'arg6'}, 380f5e5074cSMed Ismail Bennani {'name': 'r10', 'bitsize': 64, 'offset': 80, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 10, 'dwarf': 10}, 381f5e5074cSMed Ismail Bennani {'name': 'r11', 'bitsize': 64, 'offset': 88, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 11, 'dwarf': 11}, 382f5e5074cSMed Ismail Bennani {'name': 'r12', 'bitsize': 64, 'offset': 96, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 12, 'dwarf': 12}, 383f5e5074cSMed Ismail Bennani {'name': 'r13', 'bitsize': 64, 'offset': 104, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 13, 'dwarf': 13}, 384f5e5074cSMed Ismail Bennani {'name': 'r14', 'bitsize': 64, 'offset': 112, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 14, 'dwarf': 14}, 385f5e5074cSMed Ismail Bennani {'name': 'r15', 'bitsize': 64, 'offset': 120, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 15, 'dwarf': 15}, 386f5e5074cSMed Ismail Bennani {'name': 'rip', 'bitsize': 64, 'offset': 128, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'gcc': 16, 'dwarf': 16, 'generic': 'pc', 'alt-name': 'pc'}, 387f5e5074cSMed Ismail Bennani {'name': 'rflags', 'bitsize': 64, 'offset': 136, 'encoding': 'uint', 'format': 'hex', 'set': 0, 'generic': 'flags', 'alt-name': 'flags'}, 388f5e5074cSMed Ismail Bennani {'name': 'cs', 'bitsize': 64, 'offset': 144, 'encoding': 'uint', 'format': 'hex', 'set': 0}, 389f5e5074cSMed Ismail Bennani {'name': 'fs', 'bitsize': 64, 'offset': 152, 'encoding': 'uint', 'format': 'hex', 'set': 0}, 390f5e5074cSMed Ismail Bennani {'name': 'gs', 'bitsize': 64, 'offset': 160, 'encoding': 'uint', 'format': 'hex', 'set': 0} 391f5e5074cSMed Ismail Bennani ] 39259d8dd79SMed Ismail Bennani 393f5e5074cSMed Ismail Bennani 394