1*4f1223e8SApple OSS Distributionsfrom xnu import * 2*4f1223e8SApple OSS Distributionsimport logging 3*4f1223e8SApple OSS Distributions_usertaskdebugging_availabe = False 4*4f1223e8SApple OSS Distributionstry: 5*4f1223e8SApple OSS Distributions from usertaskdebugging import userprocess 6*4f1223e8SApple OSS Distributions from usertaskdebugging import gdbserver 7*4f1223e8SApple OSS Distributions _usertaskdebugging_availabe = True 8*4f1223e8SApple OSS Distributionsexcept ImportError: 9*4f1223e8SApple OSS Distributions pass 10*4f1223e8SApple OSS Distributions 11*4f1223e8SApple OSS Distributionsdef setupLogging(debug_level): 12*4f1223e8SApple OSS Distributions log_level = debug_level 13*4f1223e8SApple OSS Distributions log_filename = "/tmp/kdbserver.log" 14*4f1223e8SApple OSS Distributions logging.basicConfig(level=log_level, 15*4f1223e8SApple OSS Distributions format='%(asctime)s %(module)s %(levelname)s: %(message)s', 16*4f1223e8SApple OSS Distributions datefmt='%Y-%m-%d %H:%M:%S') 17*4f1223e8SApple OSS Distributions 18*4f1223e8SApple OSS Distributions 19*4f1223e8SApple OSS Distributions@lldb_command('beginusertaskdebugging', 'DW') 20*4f1223e8SApple OSS Distributionsdef DoUserTaskDebuggingServer(cmd_args = [], cmd_options ={}): 21*4f1223e8SApple OSS Distributions """ starts a gdb protocol server that is backed by <task_t> in kernel debugging session. 22*4f1223e8SApple OSS Distributions Usage: (lldb) beginusertaskdebugging <task_t> 23*4f1223e8SApple OSS Distributions options: -D for debug level logging 24*4f1223e8SApple OSS Distributions -W for warning level logging. 25*4f1223e8SApple OSS Distributions default is error level logging 26*4f1223e8SApple OSS Distributions """ 27*4f1223e8SApple OSS Distributions if not _usertaskdebugging_availabe: 28*4f1223e8SApple OSS Distributions print("You do not have the usertask debugging files available. ") 29*4f1223e8SApple OSS Distributions return 30*4f1223e8SApple OSS Distributions log_level = logging.INFO 31*4f1223e8SApple OSS Distributions if '-D' in cmd_options: 32*4f1223e8SApple OSS Distributions log_level = logging.DEBUG 33*4f1223e8SApple OSS Distributions elif '-W' in cmd_options: 34*4f1223e8SApple OSS Distributions log_level = logging.WARNING 35*4f1223e8SApple OSS Distributions 36*4f1223e8SApple OSS Distributions setupLogging(debug_level=log_level) 37*4f1223e8SApple OSS Distributions if not cmd_args: 38*4f1223e8SApple OSS Distributions raise ArgumentError("Please provide valid task argument.") 39*4f1223e8SApple OSS Distributions 40*4f1223e8SApple OSS Distributions t = kern.GetValueFromAddress(cmd_args[0], 'task_t') 41*4f1223e8SApple OSS Distributions 42*4f1223e8SApple OSS Distributions up = userprocess.UserProcess(t) 43*4f1223e8SApple OSS Distributions gbs = gdbserver.GDBServer(up) 44*4f1223e8SApple OSS Distributions print("Starting debug session for %s at localhost:%d." % (GetProcNameForTask(t), gbs.portnum)) 45*4f1223e8SApple OSS Distributions gbs.run() 46*4f1223e8SApple OSS Distributions print("stopped the debug session") 47