33 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| #
 | |
| # Generated file, do not edit.
 | |
| #
 | |
| 
 | |
| import lldb
 | |
| 
 | |
| def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
 | |
|     """Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
 | |
|     base = frame.register["x0"].GetValueAsAddress()
 | |
|     page_len = frame.register["x1"].GetValueAsUnsigned()
 | |
| 
 | |
|     # Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
 | |
|     # first page to see if handled it correctly. This makes diagnosing
 | |
|     # misconfiguration (e.g. missing breakpoint) easier.
 | |
|     data = bytearray(page_len)
 | |
|     data[0:8] = b'IHELPED!'
 | |
| 
 | |
|     error = lldb.SBError()
 | |
|     frame.GetThread().GetProcess().WriteMemory(base, data, error)
 | |
|     if not error.Success():
 | |
|         print(f'Failed to write into {base}[+{page_len}]', error)
 | |
|         return
 | |
| 
 | |
| def __lldb_init_module(debugger: lldb.SBDebugger, _):
 | |
|     target = debugger.GetDummyTarget()
 | |
|     # Caveat: must use BreakpointCreateByRegEx here and not
 | |
|     # BreakpointCreateByName. For some reasons callback function does not
 | |
|     # get carried over from dummy target for the later.
 | |
|     bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
 | |
|     bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
 | |
|     bp.SetAutoContinue(True)
 | |
|     print("-- LLDB integration loaded --")
 |