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