1from xnu import *
2
3@lldb_command("showcoreanalyticsformatstr")
4def PrintCoreAnalyticsFormatStr(cmd_args=None):
5    """ Pretty prints the full format string for a core analyics event
6        Usage: showcoreanalyticsformatstr <event>
7    """
8    if not cmd_args:
9        raise ArgumentError("Please specify an event.")
10        return
11    #event_ptr = kern.GetValueFromAddress(cmd_args[0], "struct _ca_event *").GetSBValue().GetValueAsUnsigned()
12    #print(event_ptr)
13    event = kern.GetValueFromAddress(cmd_args[0], "struct _ca_event *")
14    event_name = str(event.format_str)
15    print(event_name)
16    curr = event.format_str.GetSBValue().GetValueAsUnsigned()
17    offset = len(event_name) + 1
18    while True:
19        val = kern.GetValueFromAddress(curr + offset, "char *")
20        as_string = str(val)
21        if len(as_string) == 0:
22            break
23        offset = offset + len(as_string) + 1
24        print(as_string)
25