1from __future__ import absolute_import, print_function 2 3from xnu import * 4from utils import * 5 6 7@lldb_type_summary(['bank_element', 'bank_element_t']) 8@header("{0: <20s} {1: <16s} {2: <16s} {3: <16s} {4: <20s} {5: <20s}".format("bank_element", "type", "ref_count", "sync", "task", "process_name")) 9def GetBankElementSummary(bank_element): 10 """ Summarizes the bank element 11 params: bank_element = value of the object of type bank_element_t 12 returns: String with summary of the type. 13 """ 14 format_str = "{0: <#020x} {1: <16s} {2: <16d} {3: <16d}" 15 16 if bank_element.be_type == 0: 17 out_string = format_str.format(bank_element, "BANK_TASK", unsigned(bank_element.be_refs), unsigned(bank_element.be_made)) 18 else: 19 out_string = format_str.format(bank_element, "BANK_ACCOUNT", unsigned(bank_element.be_refs), unsigned(bank_element.be_made)) 20 21 #if DEVELOPMENT 22 format_str = "{0: <#020x} {1: <20s}" 23 if hasattr(bank_element, 'be_task'): 24 out_string += " " + format_str.format(bank_element.be_task, GetProcNameForTask(bank_element.be_task)) 25 #endif 26 27 return out_string 28 29 30@lldb_type_summary(['bank_task', 'bank_task_t']) 31@header("{0: <20s} {1: <16s} {2: <20s} {3: <16s} {4: <16s} {5: <16s} {6: <16s} {7: <16s} {8: <20s} {9: <20s}".format("bank_task", "pid", "ledger", "ref_count", "sync", "persona id", "uid", "gid", "task", "process_name")) 32def GetBankTaskSummary(bank_task): 33 """ Summarizes the bank task 34 params: bank_task = value of the object of type bank_task_t 35 returns: String with summary of the type. 36 """ 37 38 format_str = "{0: <#020x} {1: <16d} {2: <#020x} {3: <16d} {4: <16d} {5: <16d} {6: <16d} {7: <16d}" 39 out_string = format_str.format(bank_task, bank_task.bt_proc_persona.pid, bank_task.bt_ledger, unsigned(bank_task.bt_elem.be_refs), unsigned(bank_task.bt_elem.be_made), bank_task.bt_proc_persona.persona_id, bank_task.bt_proc_persona.uid, bank_task.bt_proc_persona.gid) 40 41 #if DEVELOPMENT 42 format_str = "{0: <#020x} {1: <20s}" 43 if hasattr(bank_task.bt_elem, 'be_task'): 44 out_string += " " + format_str.format(bank_task.bt_elem.be_task, GetProcNameForTask(bank_task.bt_elem.be_task)) 45 #endif 46 return out_string 47 48 49@lldb_type_summary(['bank_account', 'bank_account_t']) 50@header("{0: <20s} {1: <16s} {2: <16s} {3: <16s} {4: <16s} {5: <20s} {6: <16s} {7: <16s} {8: <20s} {9: <20s} {10: <20s} {11: <20s}".format("bank_account", "holder_pid", "merchant_pid", "secure_orig", "proximal_pid", "chit_ledger", "ref_count", "sync", "holder_task", "holder_process", "merchant_task", "merchant_process")) 51def GetBankAccountSummary(bank_account): 52 """ Summarizes the bank account 53 params: bank_task = value of the object of type bank_account_t 54 returns: String with summary of the type. 55 """ 56 57 format_str = "{0: <#020x} {1: <16d} {2: <16d} {3: <16d} {4: <16d} {5: <#020x} {6: <16d} {7: <16d}" 58 out_string = format_str.format(bank_account, bank_account.ba_holder.bt_proc_persona.pid, bank_account.ba_merchant.bt_proc_persona.pid, bank_account.ba_secureoriginator.bt_proc_persona.pid, bank_account.ba_proximateprocess.bt_proc_persona.pid,bank_account.ba_bill, unsigned(bank_account.ba_elem.be_refs), unsigned(bank_account.ba_elem.be_made)) 59 60 #if DEVELOPMENT 61 format_str = "{0: <#020x} {1: <20s}" 62 if hasattr(bank_account.ba_holder.bt_elem, 'be_task'): 63 out_string += " " + format_str.format(bank_account.ba_holder.bt_elem.be_task, GetProcNameForTask(bank_account.ba_holder.bt_elem.be_task)) 64 if hasattr(bank_account.ba_merchant.bt_elem, 'be_task'): 65 out_string += " " + format_str.format(bank_account.ba_merchant.bt_elem.be_task, GetProcNameForTask(bank_account.ba_merchant.bt_elem.be_task)) 66 #endif 67 return out_string 68 69 70# Macro: showbankaccountstopay 71@lldb_command('showbankaccountstopay') 72def ShowBankAccountsToPay(cmd_args=None, cmd_options={}): 73 """ show a list of merchant bank tasks for a bank_task object. 74 Usage: (lldb)showbankaccountstopay <bank_task_t> 75 """ 76 if not cmd_args: 77 raise ArgumentError("Please provide arguments") 78 79 bank_task = kern.GetValueFromAddress(cmd_args[0], 'bank_task_t') 80 print(GetBankTaskSummary.header) 81 print(GetBankTaskSummary(bank_task)) 82 print("List of Accounts to Pay.") 83 header_str = GetBankAccountSummary.header 84 print(header_str) 85 86 for bank_account in IterateQueue(bank_task.bt_accounts_to_pay, 'bank_account_t', 'ba_next_acc_to_pay'): 87 print(GetBankAccountSummary(bank_account)) 88 return 89# EndMacro: showbankaccountstopay 90 91 92# Macro: showbankaccountstocharge 93@lldb_command('showbankaccountstocharge') 94def ShowBankAccountsToCharge(cmd_args=None, cmd_options={}): 95 """ show a list of holder bank tasks for a bank_task object. 96 Usage: (lldb)showbankaccountstocharge <bank_task_t> 97 """ 98 if not cmd_args: 99 raise ArgumentError("Please provide arguments") 100 101 bank_task = kern.GetValueFromAddress(cmd_args[0], 'bank_task_t') 102 print(GetBankTaskSummary.header) 103 print(GetBankTaskSummary(bank_task)) 104 print("List of Accounts to Charge.") 105 header_str = GetBankAccountSummary.header 106 print(header_str) 107 108 for bank_account in IterateQueue(bank_task.bt_accounts_to_charge, 'bank_account_t', 'ba_next_acc_to_charge'): 109 print(GetBankAccountSummary(bank_account)) 110 return 111# EndMacro: showbankaccountstocharge 112 113 114#if DEVELOPMENT 115 116# Macro: showallbanktasklist 117@lldb_command('showallbanktasklist') 118def ShowAllBankTaskList(cmd_args=None, cmd_options={}): 119 """ A DEVELOPMENT macro that walks the list of all allocated bank_task objects 120 and prints them. 121 usage: (lldb) showallbanktasklist 122 """ 123 if not hasattr(kern.globals, 'bank_tasks_list'): 124 print("It seems you are running a build of kernel that does not have the list of all bank_tasks_list.") 125 return False 126 print(GetBankTaskSummary.header) 127 for bank_task in IterateQueue(kern.globals.bank_tasks_list, 'bank_task_t', 'bt_global_elt'): 128 print(GetBankTaskSummary(bank_task)) 129 return True 130# EndMacro showallbanktasklist 131 132 133# Macro: showallbankaccountlist 134@lldb_command('showallbankaccountlist') 135def ShowAllBankAccountList(cmd_args=None, cmd_options={}): 136 """ A DEVELOPMENT macro that walks the list of all allocated bank_account objects 137 and prints them. 138 usage: (lldb) showallbankaccountlist 139 """ 140 if not hasattr(kern.globals, 'bank_accounts_list'): 141 print("It seems you are running a build of kernel that does not have the list of all bank_accounts_list.") 142 return False 143 print(GetBankAccountSummary.header) 144 for bank_account in IterateQueue(kern.globals.bank_accounts_list, 'bank_account_t', 'ba_global_elt'): 145 print(GetBankAccountSummary(bank_account)) 146 return True 147# EndMacro showallbankaccountlist 148#endif 149