pymobiledevice3 5.0.1__py3-none-any.whl → 5.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymobiledevice3 might be problematic. Click here for more details.

Files changed (143) hide show
  1. misc/plist_sniffer.py +15 -15
  2. misc/remotexpc_sniffer.py +29 -28
  3. pymobiledevice3/__main__.py +128 -102
  4. pymobiledevice3/_version.py +2 -2
  5. pymobiledevice3/bonjour.py +26 -49
  6. pymobiledevice3/ca.py +32 -24
  7. pymobiledevice3/cli/activation.py +7 -7
  8. pymobiledevice3/cli/afc.py +19 -19
  9. pymobiledevice3/cli/amfi.py +4 -4
  10. pymobiledevice3/cli/apps.py +51 -39
  11. pymobiledevice3/cli/backup.py +58 -32
  12. pymobiledevice3/cli/bonjour.py +25 -18
  13. pymobiledevice3/cli/cli_common.py +112 -81
  14. pymobiledevice3/cli/companion_proxy.py +4 -4
  15. pymobiledevice3/cli/completions.py +10 -10
  16. pymobiledevice3/cli/crash.py +37 -31
  17. pymobiledevice3/cli/developer.py +602 -520
  18. pymobiledevice3/cli/diagnostics.py +38 -33
  19. pymobiledevice3/cli/lockdown.py +79 -74
  20. pymobiledevice3/cli/mounter.py +85 -68
  21. pymobiledevice3/cli/notification.py +10 -10
  22. pymobiledevice3/cli/pcap.py +19 -14
  23. pymobiledevice3/cli/power_assertion.py +12 -10
  24. pymobiledevice3/cli/processes.py +10 -10
  25. pymobiledevice3/cli/profile.py +88 -77
  26. pymobiledevice3/cli/provision.py +17 -17
  27. pymobiledevice3/cli/remote.py +186 -110
  28. pymobiledevice3/cli/restore.py +43 -40
  29. pymobiledevice3/cli/springboard.py +30 -28
  30. pymobiledevice3/cli/syslog.py +85 -58
  31. pymobiledevice3/cli/usbmux.py +21 -20
  32. pymobiledevice3/cli/version.py +3 -2
  33. pymobiledevice3/cli/webinspector.py +157 -79
  34. pymobiledevice3/common.py +1 -1
  35. pymobiledevice3/exceptions.py +154 -60
  36. pymobiledevice3/irecv.py +49 -53
  37. pymobiledevice3/irecv_devices.py +1489 -492
  38. pymobiledevice3/lockdown.py +394 -241
  39. pymobiledevice3/lockdown_service_provider.py +5 -7
  40. pymobiledevice3/osu/os_utils.py +18 -9
  41. pymobiledevice3/osu/posix_util.py +28 -15
  42. pymobiledevice3/osu/win_util.py +14 -8
  43. pymobiledevice3/pair_records.py +19 -19
  44. pymobiledevice3/remote/common.py +4 -4
  45. pymobiledevice3/remote/core_device/app_service.py +94 -67
  46. pymobiledevice3/remote/core_device/core_device_service.py +17 -14
  47. pymobiledevice3/remote/core_device/device_info.py +5 -5
  48. pymobiledevice3/remote/core_device/diagnostics_service.py +10 -8
  49. pymobiledevice3/remote/core_device/file_service.py +47 -33
  50. pymobiledevice3/remote/remote_service_discovery.py +53 -35
  51. pymobiledevice3/remote/remotexpc.py +62 -41
  52. pymobiledevice3/remote/tunnel_service.py +371 -293
  53. pymobiledevice3/remote/utils.py +12 -11
  54. pymobiledevice3/remote/xpc_message.py +145 -125
  55. pymobiledevice3/resources/dsc_uuid_map.py +19 -19
  56. pymobiledevice3/resources/firmware_notifications.py +16 -16
  57. pymobiledevice3/restore/asr.py +27 -27
  58. pymobiledevice3/restore/base_restore.py +90 -47
  59. pymobiledevice3/restore/consts.py +87 -66
  60. pymobiledevice3/restore/device.py +11 -11
  61. pymobiledevice3/restore/fdr.py +46 -46
  62. pymobiledevice3/restore/ftab.py +19 -19
  63. pymobiledevice3/restore/img4.py +130 -133
  64. pymobiledevice3/restore/mbn.py +35 -54
  65. pymobiledevice3/restore/recovery.py +125 -135
  66. pymobiledevice3/restore/restore.py +524 -523
  67. pymobiledevice3/restore/restore_options.py +122 -115
  68. pymobiledevice3/restore/restored_client.py +25 -22
  69. pymobiledevice3/restore/tss.py +378 -270
  70. pymobiledevice3/service_connection.py +50 -46
  71. pymobiledevice3/services/accessibilityaudit.py +136 -126
  72. pymobiledevice3/services/afc.py +350 -291
  73. pymobiledevice3/services/amfi.py +21 -18
  74. pymobiledevice3/services/companion.py +23 -19
  75. pymobiledevice3/services/crash_reports.py +60 -46
  76. pymobiledevice3/services/debugserver_applist.py +3 -3
  77. pymobiledevice3/services/device_arbitration.py +8 -8
  78. pymobiledevice3/services/device_link.py +55 -47
  79. pymobiledevice3/services/diagnostics.py +971 -968
  80. pymobiledevice3/services/dtfetchsymbols.py +8 -8
  81. pymobiledevice3/services/dvt/dvt_secure_socket_proxy.py +4 -4
  82. pymobiledevice3/services/dvt/dvt_testmanaged_proxy.py +4 -4
  83. pymobiledevice3/services/dvt/instruments/activity_trace_tap.py +85 -74
  84. pymobiledevice3/services/dvt/instruments/application_listing.py +2 -3
  85. pymobiledevice3/services/dvt/instruments/condition_inducer.py +7 -6
  86. pymobiledevice3/services/dvt/instruments/core_profile_session_tap.py +442 -421
  87. pymobiledevice3/services/dvt/instruments/device_info.py +11 -11
  88. pymobiledevice3/services/dvt/instruments/energy_monitor.py +1 -1
  89. pymobiledevice3/services/dvt/instruments/graphics.py +1 -1
  90. pymobiledevice3/services/dvt/instruments/location_simulation.py +1 -1
  91. pymobiledevice3/services/dvt/instruments/location_simulation_base.py +10 -10
  92. pymobiledevice3/services/dvt/instruments/network_monitor.py +17 -17
  93. pymobiledevice3/services/dvt/instruments/notifications.py +1 -1
  94. pymobiledevice3/services/dvt/instruments/process_control.py +25 -10
  95. pymobiledevice3/services/dvt/instruments/screenshot.py +2 -2
  96. pymobiledevice3/services/dvt/instruments/sysmontap.py +15 -15
  97. pymobiledevice3/services/dvt/testmanaged/xcuitest.py +40 -50
  98. pymobiledevice3/services/file_relay.py +10 -10
  99. pymobiledevice3/services/heartbeat.py +8 -7
  100. pymobiledevice3/services/house_arrest.py +12 -15
  101. pymobiledevice3/services/installation_proxy.py +119 -100
  102. pymobiledevice3/services/lockdown_service.py +12 -5
  103. pymobiledevice3/services/misagent.py +22 -19
  104. pymobiledevice3/services/mobile_activation.py +84 -72
  105. pymobiledevice3/services/mobile_config.py +330 -301
  106. pymobiledevice3/services/mobile_image_mounter.py +137 -116
  107. pymobiledevice3/services/mobilebackup2.py +188 -150
  108. pymobiledevice3/services/notification_proxy.py +11 -11
  109. pymobiledevice3/services/os_trace.py +69 -51
  110. pymobiledevice3/services/pcapd.py +306 -306
  111. pymobiledevice3/services/power_assertion.py +10 -9
  112. pymobiledevice3/services/preboard.py +4 -4
  113. pymobiledevice3/services/remote_fetch_symbols.py +16 -14
  114. pymobiledevice3/services/remote_server.py +176 -146
  115. pymobiledevice3/services/restore_service.py +16 -16
  116. pymobiledevice3/services/screenshot.py +13 -10
  117. pymobiledevice3/services/simulate_location.py +7 -7
  118. pymobiledevice3/services/springboard.py +15 -15
  119. pymobiledevice3/services/syslog.py +5 -5
  120. pymobiledevice3/services/web_protocol/alert.py +3 -3
  121. pymobiledevice3/services/web_protocol/automation_session.py +180 -176
  122. pymobiledevice3/services/web_protocol/cdp_screencast.py +44 -36
  123. pymobiledevice3/services/web_protocol/cdp_server.py +19 -19
  124. pymobiledevice3/services/web_protocol/cdp_target.py +411 -373
  125. pymobiledevice3/services/web_protocol/driver.py +47 -45
  126. pymobiledevice3/services/web_protocol/element.py +74 -63
  127. pymobiledevice3/services/web_protocol/inspector_session.py +106 -102
  128. pymobiledevice3/services/web_protocol/selenium_api.py +2 -2
  129. pymobiledevice3/services/web_protocol/session_protocol.py +15 -10
  130. pymobiledevice3/services/web_protocol/switch_to.py +11 -12
  131. pymobiledevice3/services/webinspector.py +127 -116
  132. pymobiledevice3/tcp_forwarder.py +35 -22
  133. pymobiledevice3/tunneld/api.py +20 -15
  134. pymobiledevice3/tunneld/server.py +212 -133
  135. pymobiledevice3/usbmux.py +183 -138
  136. pymobiledevice3/utils.py +14 -11
  137. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.2.dist-info}/METADATA +1 -1
  138. pymobiledevice3-5.0.2.dist-info/RECORD +173 -0
  139. pymobiledevice3-5.0.1.dist-info/RECORD +0 -173
  140. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.2.dist-info}/WHEEL +0 -0
  141. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.2.dist-info}/entry_points.txt +0 -0
  142. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.2.dist-info}/licenses/LICENSE +0 -0
  143. {pymobiledevice3-5.0.1.dist-info → pymobiledevice3-5.0.2.dist-info}/top_level.txt +0 -0
@@ -4,8 +4,28 @@ import uuid
4
4
  from datetime import timedelta, timezone
5
5
  from io import BytesIO
6
6
 
7
- from construct import Array, Byte, Bytes, Computed, CString, Enum, FixedSized, GreedyBytes, GreedyRange, GreedyString, \
8
- Int16ul, Int32ul, Int64ul, LazyBound, Padded, Padding, Pass, Struct, Switch, this
7
+ from construct import (
8
+ Array,
9
+ Byte,
10
+ Bytes,
11
+ Computed,
12
+ CString,
13
+ Enum,
14
+ FixedSized,
15
+ GreedyBytes,
16
+ GreedyRange,
17
+ GreedyString,
18
+ Int16ul,
19
+ Int32ul,
20
+ Int64ul,
21
+ LazyBound,
22
+ Padded,
23
+ Padding,
24
+ Pass,
25
+ Struct,
26
+ Switch,
27
+ this,
28
+ )
9
29
  from pykdebugparser.kd_buf_parser import RAW_VERSION2_BYTES
10
30
 
11
31
  from pymobiledevice3.exceptions import ExtractingStackshotError
@@ -15,488 +35,483 @@ from pymobiledevice3.services.dvt.instruments.device_info import DeviceInfo
15
35
  from pymobiledevice3.services.remote_server import Tap
16
36
 
17
37
  kcdata_types = {
18
- 'KCDATA_TYPE_INVALID': 0x0,
19
- 'KCDATA_TYPE_STRING_DESC': 0x1,
20
- 'KCDATA_TYPE_UINT32_DESC': 0x2,
21
- 'KCDATA_TYPE_UINT64_DESC': 0x3,
22
- 'KCDATA_TYPE_INT32_DESC': 0x4,
23
- 'KCDATA_TYPE_INT64_DESC': 0x5,
24
- 'KCDATA_TYPE_BINDATA_DESC': 0x6,
25
- 'KCDATA_TYPE_ARRAY': 0x11,
26
- 'KCDATA_TYPE_TYPEDEFINITION': 0x12,
27
- 'KCDATA_TYPE_CONTAINER_BEGIN': 0x13,
28
- 'KCDATA_TYPE_CONTAINER_END': 0x14,
29
-
30
- 'KCDATA_TYPE_ARRAY_PAD0': 0x20,
31
- 'KCDATA_TYPE_ARRAY_PAD1': 0x21,
32
- 'KCDATA_TYPE_ARRAY_PAD2': 0x22,
33
- 'KCDATA_TYPE_ARRAY_PAD3': 0x23,
34
- 'KCDATA_TYPE_ARRAY_PAD4': 0x24,
35
- 'KCDATA_TYPE_ARRAY_PAD5': 0x25,
36
- 'KCDATA_TYPE_ARRAY_PAD6': 0x26,
37
- 'KCDATA_TYPE_ARRAY_PAD7': 0x27,
38
- 'KCDATA_TYPE_ARRAY_PAD8': 0x28,
39
- 'KCDATA_TYPE_ARRAY_PAD9': 0x29,
40
- 'KCDATA_TYPE_ARRAY_PADa': 0x2a,
41
- 'KCDATA_TYPE_ARRAY_PADb': 0x2b,
42
- 'KCDATA_TYPE_ARRAY_PADc': 0x2c,
43
- 'KCDATA_TYPE_ARRAY_PADd': 0x2d,
44
- 'KCDATA_TYPE_ARRAY_PADe': 0x2e,
45
- 'KCDATA_TYPE_ARRAY_PADf': 0x2f,
46
-
47
- 'KCDATA_TYPE_LIBRARY_LOADINFO': 0x30,
48
- 'KCDATA_TYPE_LIBRARY_LOADINFO64': 0x31,
49
- 'KCDATA_TYPE_TIMEBASE': 0x32,
50
- 'KCDATA_TYPE_MACH_ABSOLUTE_TIME': 0x33,
51
- 'KCDATA_TYPE_TIMEVAL': 0x34,
52
- 'KCDATA_TYPE_USECS_SINCE_EPOCH': 0x35,
53
- 'KCDATA_TYPE_PID': 0x36,
54
- 'KCDATA_TYPE_PROCNAME': 0x37,
55
- 'KCDATA_TYPE_NESTED_KCDATA': 0x38,
56
-
57
- 'STACKSHOT_KCTYPE_IO_STATISTICS': 0x901,
58
- 'STACKSHOT_KCCONTAINER_TASK': 0x903,
59
- 'STACKSHOT_KCCONTAINER_THREAD': 0x904,
60
- 'STACKSHOT_KCTYPE_TASK_SNAPSHOT': 0x905,
61
- 'STACKSHOT_KCTYPE_THREAD_SNAPSHOT': 0x906,
62
- 'STACKSHOT_KCTYPE_DONATING_PIDS': 0x907,
63
- 'STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO': 0x908,
64
- 'STACKSHOT_KCTYPE_THREAD_NAME': 0x909,
65
- 'STACKSHOT_KCTYPE_KERN_STACKFRAME': 0x90A,
66
- 'STACKSHOT_KCTYPE_KERN_STACKFRAME64': 0x90B,
67
- 'STACKSHOT_KCTYPE_USER_STACKFRAME': 0x90C,
68
- 'STACKSHOT_KCTYPE_USER_STACKFRAME64': 0x90D,
69
- 'STACKSHOT_KCTYPE_BOOTARGS': 0x90E,
70
- 'STACKSHOT_KCTYPE_OSVERSION': 0x90F,
71
- 'STACKSHOT_KCTYPE_KERN_PAGE_SIZE': 0x910,
72
- 'STACKSHOT_KCTYPE_JETSAM_LEVEL': 0x911,
73
- 'STACKSHOT_KCTYPE_DELTA_SINCE_TIMESTAMP': 0x912,
74
- 'STACKSHOT_KCTYPE_KERN_STACKLR': 0x913,
75
- 'STACKSHOT_KCTYPE_KERN_STACKLR64': 0x914,
76
- 'STACKSHOT_KCTYPE_USER_STACKLR': 0x915,
77
- 'STACKSHOT_KCTYPE_USER_STACKLR64': 0x916,
78
- 'STACKSHOT_KCTYPE_NONRUNNABLE_TIDS': 0x917,
79
- 'STACKSHOT_KCTYPE_NONRUNNABLE_TASKS': 0x918,
80
- 'STACKSHOT_KCTYPE_CPU_TIMES': 0x919,
81
- 'STACKSHOT_KCTYPE_STACKSHOT_DURATION': 0x91a,
82
- 'STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS': 0x91b,
83
- 'STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO': 0x91c,
84
- 'STACKSHOT_KCTYPE_THREAD_WAITINFO': 0x91d,
85
- 'STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT': 0x91e,
86
- 'STACKSHOT_KCTYPE_THREAD_GROUP': 0x91f,
87
- 'STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT': 0x920,
88
- 'STACKSHOT_KCTYPE_JETSAM_COALITION': 0x921,
89
- 'STACKSHOT_KCTYPE_THREAD_POLICY_VERSION': 0x922,
90
- 'STACKSHOT_KCTYPE_INSTRS_CYCLES': 0x923,
91
- 'STACKSHOT_KCTYPE_USER_STACKTOP': 0x924,
92
- 'STACKSHOT_KCTYPE_ASID': 0x925,
93
- 'STACKSHOT_KCTYPE_PAGE_TABLES': 0x926,
94
- 'STACKSHOT_KCTYPE_SYS_SHAREDCACHE_LAYOUT': 0x927,
95
- 'STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL': 0x928,
96
- 'STACKSHOT_KCTYPE_THREAD_TURNSTILEINFO': 0x929,
97
- 'STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE': 0x92a,
98
- 'STACKSHOT_KCTYPE_LATENCY_INFO': 0x92b,
99
- 'STACKSHOT_KCTYPE_LATENCY_INFO_TASK': 0x92c,
100
- 'STACKSHOT_KCTYPE_LATENCY_INFO_THREAD': 0x92d,
101
- 'STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC': 0x92e,
102
-
103
- 'STACKSHOT_KCTYPE_USER_ASYNC_START_INDEX': 0x932,
104
- 'STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64': 0x933,
105
-
106
- 'STACKSHOT_KCTYPE_TASK_DELTA_SNAPSHOT': 0x940,
107
- 'STACKSHOT_KCTYPE_THREAD_DELTA_SNAPSHOT': 0x941,
108
- 'STACKSHOT_KCCONTAINER_SHAREDCACHE': 0x942,
109
- 'STACKSHOT_KCTYPE_UNKNOWN_0x943': 0x943,
110
- 'STACKSHOT_KCCONTAINER_EXCLAVES': 0x949,
111
- 'STACKSHOT_KCCONTAINER_EXCLAVE_SCRESULT': 0x94a,
112
-
113
- 'STACKSHOT_KCCONTAINER_EXCLAVE_IPCSTACKENTRY': 0x94c,
114
- 'STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_INFO': 0x94d,
115
- 'STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_ECSTACK': 0x94e,
116
- 'STACKSHOT_KCCONTAINER_EXCLAVE_ADDRESSSPACE': 0x94f,
117
-
118
- 'STACKSHOT_KCCONTAINER_EXCLAVE_TEXTLAYOUT': 0x952,
119
- 'STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_INFO': 0x953,
120
- 'STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_SEGMENTS': 0x954,
121
-
122
- 'KCDATA_TYPE_BUFFER_END': 0xF19158ED,
123
-
124
- 'TASK_CRASHINFO_EXTMODINFO': 0x801,
125
- 'TASK_CRASHINFO_BSDINFOWITHUNIQID': 0x802,
126
- 'TASK_CRASHINFO_TASKDYLD_INFO': 0x803,
127
- 'TASK_CRASHINFO_UUID': 0x804,
128
- 'TASK_CRASHINFO_PID': 0x805,
129
- 'TASK_CRASHINFO_PPID': 0x806,
130
-
38
+ "KCDATA_TYPE_INVALID": 0x0,
39
+ "KCDATA_TYPE_STRING_DESC": 0x1,
40
+ "KCDATA_TYPE_UINT32_DESC": 0x2,
41
+ "KCDATA_TYPE_UINT64_DESC": 0x3,
42
+ "KCDATA_TYPE_INT32_DESC": 0x4,
43
+ "KCDATA_TYPE_INT64_DESC": 0x5,
44
+ "KCDATA_TYPE_BINDATA_DESC": 0x6,
45
+ "KCDATA_TYPE_ARRAY": 0x11,
46
+ "KCDATA_TYPE_TYPEDEFINITION": 0x12,
47
+ "KCDATA_TYPE_CONTAINER_BEGIN": 0x13,
48
+ "KCDATA_TYPE_CONTAINER_END": 0x14,
49
+ "KCDATA_TYPE_ARRAY_PAD0": 0x20,
50
+ "KCDATA_TYPE_ARRAY_PAD1": 0x21,
51
+ "KCDATA_TYPE_ARRAY_PAD2": 0x22,
52
+ "KCDATA_TYPE_ARRAY_PAD3": 0x23,
53
+ "KCDATA_TYPE_ARRAY_PAD4": 0x24,
54
+ "KCDATA_TYPE_ARRAY_PAD5": 0x25,
55
+ "KCDATA_TYPE_ARRAY_PAD6": 0x26,
56
+ "KCDATA_TYPE_ARRAY_PAD7": 0x27,
57
+ "KCDATA_TYPE_ARRAY_PAD8": 0x28,
58
+ "KCDATA_TYPE_ARRAY_PAD9": 0x29,
59
+ "KCDATA_TYPE_ARRAY_PADa": 0x2A,
60
+ "KCDATA_TYPE_ARRAY_PADb": 0x2B,
61
+ "KCDATA_TYPE_ARRAY_PADc": 0x2C,
62
+ "KCDATA_TYPE_ARRAY_PADd": 0x2D,
63
+ "KCDATA_TYPE_ARRAY_PADe": 0x2E,
64
+ "KCDATA_TYPE_ARRAY_PADf": 0x2F,
65
+ "KCDATA_TYPE_LIBRARY_LOADINFO": 0x30,
66
+ "KCDATA_TYPE_LIBRARY_LOADINFO64": 0x31,
67
+ "KCDATA_TYPE_TIMEBASE": 0x32,
68
+ "KCDATA_TYPE_MACH_ABSOLUTE_TIME": 0x33,
69
+ "KCDATA_TYPE_TIMEVAL": 0x34,
70
+ "KCDATA_TYPE_USECS_SINCE_EPOCH": 0x35,
71
+ "KCDATA_TYPE_PID": 0x36,
72
+ "KCDATA_TYPE_PROCNAME": 0x37,
73
+ "KCDATA_TYPE_NESTED_KCDATA": 0x38,
74
+ "STACKSHOT_KCTYPE_IO_STATISTICS": 0x901,
75
+ "STACKSHOT_KCCONTAINER_TASK": 0x903,
76
+ "STACKSHOT_KCCONTAINER_THREAD": 0x904,
77
+ "STACKSHOT_KCTYPE_TASK_SNAPSHOT": 0x905,
78
+ "STACKSHOT_KCTYPE_THREAD_SNAPSHOT": 0x906,
79
+ "STACKSHOT_KCTYPE_DONATING_PIDS": 0x907,
80
+ "STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO": 0x908,
81
+ "STACKSHOT_KCTYPE_THREAD_NAME": 0x909,
82
+ "STACKSHOT_KCTYPE_KERN_STACKFRAME": 0x90A,
83
+ "STACKSHOT_KCTYPE_KERN_STACKFRAME64": 0x90B,
84
+ "STACKSHOT_KCTYPE_USER_STACKFRAME": 0x90C,
85
+ "STACKSHOT_KCTYPE_USER_STACKFRAME64": 0x90D,
86
+ "STACKSHOT_KCTYPE_BOOTARGS": 0x90E,
87
+ "STACKSHOT_KCTYPE_OSVERSION": 0x90F,
88
+ "STACKSHOT_KCTYPE_KERN_PAGE_SIZE": 0x910,
89
+ "STACKSHOT_KCTYPE_JETSAM_LEVEL": 0x911,
90
+ "STACKSHOT_KCTYPE_DELTA_SINCE_TIMESTAMP": 0x912,
91
+ "STACKSHOT_KCTYPE_KERN_STACKLR": 0x913,
92
+ "STACKSHOT_KCTYPE_KERN_STACKLR64": 0x914,
93
+ "STACKSHOT_KCTYPE_USER_STACKLR": 0x915,
94
+ "STACKSHOT_KCTYPE_USER_STACKLR64": 0x916,
95
+ "STACKSHOT_KCTYPE_NONRUNNABLE_TIDS": 0x917,
96
+ "STACKSHOT_KCTYPE_NONRUNNABLE_TASKS": 0x918,
97
+ "STACKSHOT_KCTYPE_CPU_TIMES": 0x919,
98
+ "STACKSHOT_KCTYPE_STACKSHOT_DURATION": 0x91A,
99
+ "STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS": 0x91B,
100
+ "STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO": 0x91C,
101
+ "STACKSHOT_KCTYPE_THREAD_WAITINFO": 0x91D,
102
+ "STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT": 0x91E,
103
+ "STACKSHOT_KCTYPE_THREAD_GROUP": 0x91F,
104
+ "STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT": 0x920,
105
+ "STACKSHOT_KCTYPE_JETSAM_COALITION": 0x921,
106
+ "STACKSHOT_KCTYPE_THREAD_POLICY_VERSION": 0x922,
107
+ "STACKSHOT_KCTYPE_INSTRS_CYCLES": 0x923,
108
+ "STACKSHOT_KCTYPE_USER_STACKTOP": 0x924,
109
+ "STACKSHOT_KCTYPE_ASID": 0x925,
110
+ "STACKSHOT_KCTYPE_PAGE_TABLES": 0x926,
111
+ "STACKSHOT_KCTYPE_SYS_SHAREDCACHE_LAYOUT": 0x927,
112
+ "STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL": 0x928,
113
+ "STACKSHOT_KCTYPE_THREAD_TURNSTILEINFO": 0x929,
114
+ "STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE": 0x92A,
115
+ "STACKSHOT_KCTYPE_LATENCY_INFO": 0x92B,
116
+ "STACKSHOT_KCTYPE_LATENCY_INFO_TASK": 0x92C,
117
+ "STACKSHOT_KCTYPE_LATENCY_INFO_THREAD": 0x92D,
118
+ "STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC": 0x92E,
119
+ "STACKSHOT_KCTYPE_USER_ASYNC_START_INDEX": 0x932,
120
+ "STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64": 0x933,
121
+ "STACKSHOT_KCTYPE_TASK_DELTA_SNAPSHOT": 0x940,
122
+ "STACKSHOT_KCTYPE_THREAD_DELTA_SNAPSHOT": 0x941,
123
+ "STACKSHOT_KCCONTAINER_SHAREDCACHE": 0x942,
124
+ "STACKSHOT_KCTYPE_UNKNOWN_0x943": 0x943,
125
+ "STACKSHOT_KCCONTAINER_EXCLAVES": 0x949,
126
+ "STACKSHOT_KCCONTAINER_EXCLAVE_SCRESULT": 0x94A,
127
+ "STACKSHOT_KCCONTAINER_EXCLAVE_IPCSTACKENTRY": 0x94C,
128
+ "STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_INFO": 0x94D,
129
+ "STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_ECSTACK": 0x94E,
130
+ "STACKSHOT_KCCONTAINER_EXCLAVE_ADDRESSSPACE": 0x94F,
131
+ "STACKSHOT_KCCONTAINER_EXCLAVE_TEXTLAYOUT": 0x952,
132
+ "STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_INFO": 0x953,
133
+ "STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_SEGMENTS": 0x954,
134
+ "KCDATA_TYPE_BUFFER_END": 0xF19158ED,
135
+ "TASK_CRASHINFO_EXTMODINFO": 0x801,
136
+ "TASK_CRASHINFO_BSDINFOWITHUNIQID": 0x802,
137
+ "TASK_CRASHINFO_TASKDYLD_INFO": 0x803,
138
+ "TASK_CRASHINFO_UUID": 0x804,
139
+ "TASK_CRASHINFO_PID": 0x805,
140
+ "TASK_CRASHINFO_PPID": 0x806,
131
141
  # Don't want anyone using this. It's struct rusage from whatever machine generated the data
132
142
  # 'TASK_CRASHINFO_RUSAGE': 0x807,
133
- 'Type_0x807': 0x807,
134
-
135
- 'TASK_CRASHINFO_RUSAGE_INFO': 0x808,
136
- 'TASK_CRASHINFO_PROC_NAME': 0x809,
137
- 'TASK_CRASHINFO_PROC_STARTTIME': 0x80B,
138
- 'TASK_CRASHINFO_USERSTACK': 0x80C,
139
- 'TASK_CRASHINFO_ARGSLEN': 0x80D,
140
- 'TASK_CRASHINFO_EXCEPTION_CODES': 0x80E,
141
- 'TASK_CRASHINFO_PROC_PATH': 0x80F,
142
- 'TASK_CRASHINFO_PROC_CSFLAGS': 0x810,
143
- 'TASK_CRASHINFO_PROC_STATUS': 0x811,
144
- 'TASK_CRASHINFO_UID': 0x812,
145
- 'TASK_CRASHINFO_GID': 0x813,
146
- 'TASK_CRASHINFO_PROC_ARGC': 0x814,
147
- 'TASK_CRASHINFO_PROC_FLAGS': 0x815,
148
- 'TASK_CRASHINFO_CPUTYPE': 0x816,
149
- 'TASK_CRASHINFO_WORKQUEUEINFO': 0x817,
150
- 'TASK_CRASHINFO_RESPONSIBLE_PID': 0x818,
151
- 'TASK_CRASHINFO_DIRTY_FLAGS': 0x819,
152
- 'TASK_CRASHINFO_CRASHED_THREADID': 0x81A,
153
- 'TASK_CRASHINFO_COALITION_ID': 0x81B,
154
- 'EXIT_REASON_SNAPSHOT': 0x1001,
155
- 'EXIT_REASON_USER_DESC': 0x1002,
156
- 'EXIT_REASON_USER_PAYLOAD': 0x1003,
157
- 'EXIT_REASON_CODESIGNING_INFO': 0x1004,
158
- 'EXIT_REASON_WORKLOOP_ID': 0x1005,
159
- 'EXIT_REASON_DISPATCH_QUEUE_NO': 0x1006,
160
- 'KCDATA_BUFFER_BEGIN_CRASHINFO': 0xDEADF157,
161
- 'KCDATA_BUFFER_BEGIN_DELTA_STACKSHOT': 0xDE17A59A,
162
- 'KCDATA_BUFFER_BEGIN_STACKSHOT': 0x59a25807,
163
- 'KCDATA_BUFFER_BEGIN_COMPRESSED': 0x434f4d50,
164
- 'KCDATA_BUFFER_BEGIN_OS_REASON': 0x53A20900,
165
- 'KCDATA_BUFFER_BEGIN_XNUPOST_CONFIG': 0x1E21C09F,
143
+ "Type_0x807": 0x807,
144
+ "TASK_CRASHINFO_RUSAGE_INFO": 0x808,
145
+ "TASK_CRASHINFO_PROC_NAME": 0x809,
146
+ "TASK_CRASHINFO_PROC_STARTTIME": 0x80B,
147
+ "TASK_CRASHINFO_USERSTACK": 0x80C,
148
+ "TASK_CRASHINFO_ARGSLEN": 0x80D,
149
+ "TASK_CRASHINFO_EXCEPTION_CODES": 0x80E,
150
+ "TASK_CRASHINFO_PROC_PATH": 0x80F,
151
+ "TASK_CRASHINFO_PROC_CSFLAGS": 0x810,
152
+ "TASK_CRASHINFO_PROC_STATUS": 0x811,
153
+ "TASK_CRASHINFO_UID": 0x812,
154
+ "TASK_CRASHINFO_GID": 0x813,
155
+ "TASK_CRASHINFO_PROC_ARGC": 0x814,
156
+ "TASK_CRASHINFO_PROC_FLAGS": 0x815,
157
+ "TASK_CRASHINFO_CPUTYPE": 0x816,
158
+ "TASK_CRASHINFO_WORKQUEUEINFO": 0x817,
159
+ "TASK_CRASHINFO_RESPONSIBLE_PID": 0x818,
160
+ "TASK_CRASHINFO_DIRTY_FLAGS": 0x819,
161
+ "TASK_CRASHINFO_CRASHED_THREADID": 0x81A,
162
+ "TASK_CRASHINFO_COALITION_ID": 0x81B,
163
+ "EXIT_REASON_SNAPSHOT": 0x1001,
164
+ "EXIT_REASON_USER_DESC": 0x1002,
165
+ "EXIT_REASON_USER_PAYLOAD": 0x1003,
166
+ "EXIT_REASON_CODESIGNING_INFO": 0x1004,
167
+ "EXIT_REASON_WORKLOOP_ID": 0x1005,
168
+ "EXIT_REASON_DISPATCH_QUEUE_NO": 0x1006,
169
+ "KCDATA_BUFFER_BEGIN_CRASHINFO": 0xDEADF157,
170
+ "KCDATA_BUFFER_BEGIN_DELTA_STACKSHOT": 0xDE17A59A,
171
+ "KCDATA_BUFFER_BEGIN_STACKSHOT": 0x59A25807,
172
+ "KCDATA_BUFFER_BEGIN_COMPRESSED": 0x434F4D50,
173
+ "KCDATA_BUFFER_BEGIN_OS_REASON": 0x53A20900,
174
+ "KCDATA_BUFFER_BEGIN_XNUPOST_CONFIG": 0x1E21C09F,
166
175
  }
167
176
 
168
177
  kcdata_types_enum = Enum(Int32ul, **kcdata_types)
169
178
 
170
179
  predefined_names = {
171
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_LEVEL: 'jetsam_level',
172
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_POLICY_VERSION: 'thread_policy_version',
173
- kcdata_types_enum.STACKSHOT_KCTYPE_KERN_PAGE_SIZE: 'kernel_page_size',
174
- kcdata_types_enum.STACKSHOT_KCTYPE_OSVERSION: 'osversion',
175
- kcdata_types_enum.STACKSHOT_KCTYPE_BOOTARGS: 'boot_args',
176
- kcdata_types_enum.KCDATA_TYPE_TIMEBASE: 'mach_timebase_info',
177
- kcdata_types_enum.KCDATA_TYPE_MACH_ABSOLUTE_TIME: 'mach_absolute_time',
178
- kcdata_types_enum.KCDATA_TYPE_USECS_SINCE_EPOCH: 'usecs_since_epoch',
179
- kcdata_types_enum.STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO: 'shared_cache_dyld_load_info',
180
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT: 'thread_group_snapshot',
181
- kcdata_types_enum.STACKSHOT_KCCONTAINER_TASK: 'task_snapshots',
182
- kcdata_types_enum.STACKSHOT_KCCONTAINER_THREAD: 'thread_snapshots',
183
- kcdata_types_enum.STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO: 'kernelcache_load_info',
184
- kcdata_types_enum.STACKSHOT_KCTYPE_TASK_SNAPSHOT: 'task_snapshot',
185
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION: 'jetsam_coalition',
186
- kcdata_types_enum.STACKSHOT_KCTYPE_IO_STATISTICS: 'io_statistics',
187
- kcdata_types_enum.STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE: 'task_cpu_architecture',
188
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_SNAPSHOT: 'thread_snapshot',
189
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_NAME: 'pth_name',
190
- kcdata_types_enum.STACKSHOT_KCTYPE_CPU_TIMES: 'cpu_times',
191
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP: 'thread_group',
192
- kcdata_types_enum.STACKSHOT_KCTYPE_KERN_STACKLR64: 'kernel_stack_frames',
193
- kcdata_types_enum.KCDATA_TYPE_LIBRARY_LOADINFO64: 'dyld_load_info',
194
- kcdata_types_enum.STACKSHOT_KCTYPE_USER_STACKLR64: 'user_stack_frames',
195
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT: 'jetsam_coalition_snapshot',
196
- kcdata_types_enum.STACKSHOT_KCTYPE_DONATING_PIDS: 'donating_pids',
197
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL: 'dispatch_queue_label',
198
- kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT: 'kcdata_stackshot',
199
- kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS: 'stackshot_fault_stats',
200
- kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_DURATION: 'stackshot_duration',
201
- kcdata_types_enum.STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC: 'dyld_load_info_text_exec',
202
- kcdata_types_enum.STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64: 'user_async_stack_lr',
203
- kcdata_types_enum.STACKSHOT_KCCONTAINER_SHAREDCACHE: 'container_sharedcache',
204
- kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVES: 'container_exclaves',
205
- kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_SCRESULT: 'exclave_scresult',
206
- kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_IPCSTACKENTRY: 'exclave_ipc_stack_entry',
207
- kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_ECSTACK: 'exclave_ipc_stack_entry_ecstack',
208
- kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_ADDRESSSPACE: 'exclave_address_space',
209
- kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_TEXTLAYOUT: 'exclave_text_layout',
210
- kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_INFO: 'exclave_text_layout_info',
211
- kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_SEGMENTS: 'exclave_text_layout_segments',
180
+ kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_LEVEL: "jetsam_level",
181
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_POLICY_VERSION: "thread_policy_version",
182
+ kcdata_types_enum.STACKSHOT_KCTYPE_KERN_PAGE_SIZE: "kernel_page_size",
183
+ kcdata_types_enum.STACKSHOT_KCTYPE_OSVERSION: "osversion",
184
+ kcdata_types_enum.STACKSHOT_KCTYPE_BOOTARGS: "boot_args",
185
+ kcdata_types_enum.KCDATA_TYPE_TIMEBASE: "mach_timebase_info",
186
+ kcdata_types_enum.KCDATA_TYPE_MACH_ABSOLUTE_TIME: "mach_absolute_time",
187
+ kcdata_types_enum.KCDATA_TYPE_USECS_SINCE_EPOCH: "usecs_since_epoch",
188
+ kcdata_types_enum.STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO: "shared_cache_dyld_load_info",
189
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT: "thread_group_snapshot",
190
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_TASK: "task_snapshots",
191
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_THREAD: "thread_snapshots",
192
+ kcdata_types_enum.STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO: "kernelcache_load_info",
193
+ kcdata_types_enum.STACKSHOT_KCTYPE_TASK_SNAPSHOT: "task_snapshot",
194
+ kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION: "jetsam_coalition",
195
+ kcdata_types_enum.STACKSHOT_KCTYPE_IO_STATISTICS: "io_statistics",
196
+ kcdata_types_enum.STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE: "task_cpu_architecture",
197
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_SNAPSHOT: "thread_snapshot",
198
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_NAME: "pth_name",
199
+ kcdata_types_enum.STACKSHOT_KCTYPE_CPU_TIMES: "cpu_times",
200
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP: "thread_group",
201
+ kcdata_types_enum.STACKSHOT_KCTYPE_KERN_STACKLR64: "kernel_stack_frames",
202
+ kcdata_types_enum.KCDATA_TYPE_LIBRARY_LOADINFO64: "dyld_load_info",
203
+ kcdata_types_enum.STACKSHOT_KCTYPE_USER_STACKLR64: "user_stack_frames",
204
+ kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT: "jetsam_coalition_snapshot",
205
+ kcdata_types_enum.STACKSHOT_KCTYPE_DONATING_PIDS: "donating_pids",
206
+ kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL: "dispatch_queue_label",
207
+ kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT: "kcdata_stackshot",
208
+ kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS: "stackshot_fault_stats",
209
+ kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_DURATION: "stackshot_duration",
210
+ kcdata_types_enum.STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC: "dyld_load_info_text_exec",
211
+ kcdata_types_enum.STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64: "user_async_stack_lr",
212
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_SHAREDCACHE: "container_sharedcache",
213
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVES: "container_exclaves",
214
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_SCRESULT: "exclave_scresult",
215
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_IPCSTACKENTRY: "exclave_ipc_stack_entry",
216
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_ECSTACK: "exclave_ipc_stack_entry_ecstack",
217
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_ADDRESSSPACE: "exclave_address_space",
218
+ kcdata_types_enum.STACKSHOT_KCCONTAINER_EXCLAVE_TEXTLAYOUT: "exclave_text_layout",
219
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_INFO: "exclave_text_layout_info",
220
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_SEGMENTS: "exclave_text_layout_segments",
212
221
  }
213
222
 
214
- predefined_name_substruct = 'name' / Computed(lambda ctx: predefined_names[ctx._.type])
223
+ predefined_name_substruct = "name" / Computed(lambda ctx: predefined_names[ctx._.type])
215
224
 
216
225
  uint32_desc = Struct(
217
- 'name' / Padded(32, CString('utf8')),
218
- 'obj' / Int32ul,
226
+ "name" / Padded(32, CString("utf8")),
227
+ "obj" / Int32ul,
219
228
  )
220
229
 
221
230
  uint64_desc = Struct(
222
- 'name' / Padded(32, CString('utf8')),
223
- 'obj' / Int64ul,
231
+ "name" / Padded(32, CString("utf8")),
232
+ "obj" / Int64ul,
224
233
  )
225
234
 
226
- jetsam_level = Struct(predefined_name_substruct, 'obj' / Int32ul)
227
- thread_policy_version = Struct(predefined_name_substruct, 'obj' / Int32ul)
228
- kernel_page_size = Struct(predefined_name_substruct, 'obj' / Int32ul)
229
- osversion = Struct(predefined_name_substruct, 'obj' / CString('utf8'))
230
- boot_args = Struct(predefined_name_substruct, 'obj' / CString('utf8'))
235
+ jetsam_level = Struct(predefined_name_substruct, "obj" / Int32ul)
236
+ thread_policy_version = Struct(predefined_name_substruct, "obj" / Int32ul)
237
+ kernel_page_size = Struct(predefined_name_substruct, "obj" / Int32ul)
238
+ osversion = Struct(predefined_name_substruct, "obj" / CString("utf8"))
239
+ boot_args = Struct(predefined_name_substruct, "obj" / CString("utf8"))
231
240
  mach_timebase_info = Struct(
232
241
  predefined_name_substruct,
233
- 'obj' / Struct(
234
- 'numer' / Int32ul,
235
- 'denom' / Int32ul,
236
- )
242
+ "obj"
243
+ / Struct(
244
+ "numer" / Int32ul,
245
+ "denom" / Int32ul,
246
+ ),
237
247
  )
238
- mach_absolute_time = Struct(predefined_name_substruct, 'obj' / Int64ul)
239
- usecs_since_epoch = Struct(predefined_name_substruct, 'obj' / Int64ul)
248
+ mach_absolute_time = Struct(predefined_name_substruct, "obj" / Int64ul)
249
+ usecs_since_epoch = Struct(predefined_name_substruct, "obj" / Int64ul)
240
250
  shared_cache_dyld_load_info = Struct(
241
251
  predefined_name_substruct,
242
- 'obj' / Struct(
243
- 'imageLoadAddress' / Int64ul,
244
- '_imageUUID' / Bytes(16),
245
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
246
- 'imageSlidBaseAddress' / Int64ul,
252
+ "obj"
253
+ / Struct(
254
+ "imageLoadAddress" / Int64ul,
255
+ "_imageUUID" / Bytes(16),
256
+ "imageUUID" / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
257
+ "imageSlidBaseAddress" / Int64ul,
247
258
  ),
248
259
  )
249
260
 
250
261
  thread_group_snapshot_trace_v2 = Struct(
251
- 'tgs_id' / Int64ul,
252
- '_tgs_name' / FixedSized(16, GreedyString('utf8')),
253
- 'tgs_name' / Computed(lambda ctx: ctx._tgs_name.strip('\x00')),
254
- 'tgs_flags' / Int64ul,
262
+ "tgs_id" / Int64ul,
263
+ "_tgs_name" / FixedSized(16, GreedyString("utf8")),
264
+ "tgs_name" / Computed(lambda ctx: ctx._tgs_name.strip("\x00")),
265
+ "tgs_flags" / Int64ul,
255
266
  )
256
267
 
257
268
  thread_group_snapshot_trace_v3 = Struct(
258
- 'tgs_id' / Int64ul,
259
- '_tgs_name' / Bytes(16),
260
- 'tgs_flags' / Int64ul,
261
- '_tgs_name_cont' / Bytes(16),
262
- 'tgs_name' / Computed(
263
- lambda ctx: (ctx._tgs_name.strip(b'\x00') + ctx._tgs_name_cont.strip(b'\x00')).decode('utf-8')),
269
+ "tgs_id" / Int64ul,
270
+ "_tgs_name" / Bytes(16),
271
+ "tgs_flags" / Int64ul,
272
+ "_tgs_name_cont" / Bytes(16),
273
+ "tgs_name"
274
+ / Computed(lambda ctx: (ctx._tgs_name.strip(b"\x00") + ctx._tgs_name_cont.strip(b"\x00")).decode("utf-8")),
264
275
  )
265
276
 
266
277
  thread_group_snapshot = Struct(
267
278
  predefined_name_substruct,
268
- 'obj' / Switch(
279
+ "obj"
280
+ / Switch(
269
281
  lambda ctx: ctx._._.size // ctx._.count,
270
282
  {
271
283
  thread_group_snapshot_trace_v2.sizeof(): thread_group_snapshot_trace_v2,
272
284
  thread_group_snapshot_trace_v3.sizeof(): thread_group_snapshot_trace_v3,
273
- }
274
- )
285
+ },
286
+ ),
275
287
  )
276
288
  type_array_pad0 = Struct(
277
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
278
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
279
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
280
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
281
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
282
- lambda ctx: ctx.type,
283
- kcdata_types_structures,
284
- default=GreedyBytes
285
- ))),
289
+ "flags_type" / Computed(lambda ctx: (ctx._.flags >> 32) & 0xFFFFFFFF),
290
+ "type" / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
291
+ "count" / Computed(lambda ctx: ctx._.flags & 0xFFFFFFFF),
292
+ "name" / Computed(lambda ctx: predefined_names[ctx.type]),
293
+ "obj"
294
+ / Array(this.count, LazyBound(lambda: Switch(lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes))),
286
295
  )
287
296
  type_array_pad4 = Struct(
288
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
289
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
290
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
291
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
292
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
293
- lambda ctx: ctx.type,
294
- kcdata_types_structures,
295
- default=GreedyBytes
296
- ))),
297
+ "flags_type" / Computed(lambda ctx: (ctx._.flags >> 32) & 0xFFFFFFFF),
298
+ "type" / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
299
+ "count" / Computed(lambda ctx: ctx._.flags & 0xFFFFFFFF),
300
+ "name" / Computed(lambda ctx: predefined_names[ctx.type]),
301
+ "obj"
302
+ / Array(this.count, LazyBound(lambda: Switch(lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes))),
297
303
  Padding(4),
298
304
  )
299
305
  type_array_pad8 = Struct(
300
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
301
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
302
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
303
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
304
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
305
- lambda ctx: ctx.type,
306
- kcdata_types_structures,
307
- default=GreedyBytes
308
- ))),
306
+ "flags_type" / Computed(lambda ctx: (ctx._.flags >> 32) & 0xFFFFFFFF),
307
+ "type" / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
308
+ "count" / Computed(lambda ctx: ctx._.flags & 0xFFFFFFFF),
309
+ "name" / Computed(lambda ctx: predefined_names[ctx.type]),
310
+ "obj"
311
+ / Array(this.count, LazyBound(lambda: Switch(lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes))),
309
312
  Padding(8),
310
313
  )
311
314
  type_array_padc = Struct(
312
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
313
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
314
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
315
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
316
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
317
- lambda ctx: ctx.type,
318
- kcdata_types_structures,
319
- default=GreedyBytes
320
- ))),
321
- Padding(0xc),
315
+ "flags_type" / Computed(lambda ctx: (ctx._.flags >> 32) & 0xFFFFFFFF),
316
+ "type" / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
317
+ "count" / Computed(lambda ctx: ctx._.flags & 0xFFFFFFFF),
318
+ "name" / Computed(lambda ctx: predefined_names[ctx.type]),
319
+ "obj"
320
+ / Array(this.count, LazyBound(lambda: Switch(lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes))),
321
+ Padding(0xC),
322
322
  )
323
323
  type_container_begin = Struct(
324
- 'obj' / kcdata_types_enum,
325
- 'name' / Computed(lambda ctx: predefined_names.get(ctx.obj, 'unknown')),
326
- 'unique_id' / Computed(lambda ctx: ctx._.flags),
324
+ "obj" / kcdata_types_enum,
325
+ "name" / Computed(lambda ctx: predefined_names.get(ctx.obj, "unknown")),
326
+ "unique_id" / Computed(lambda ctx: ctx._.flags),
327
327
  )
328
328
  kernelcache_load_info = Struct(
329
329
  predefined_name_substruct,
330
- 'obj' / Struct(
331
- 'imageLoadAddress' / Int64ul,
332
- '_imageUUID' / Bytes(16),
333
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
330
+ "obj"
331
+ / Struct(
332
+ "imageLoadAddress" / Int64ul,
333
+ "_imageUUID" / Bytes(16),
334
+ "imageUUID" / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
334
335
  ),
335
336
  )
336
337
  task_snapshot = Struct(
337
338
  predefined_name_substruct,
338
- 'obj' / Struct(
339
- 'ts_unique_pid' / Int64ul,
340
- 'ts_ss_flags' / Int64ul,
341
- 'ts_user_time_in_terminated_thre' / Int64ul,
342
- 'ts_system_time_in_terminated_th' / Int64ul,
343
- 'ts_p_start_sec' / Int64ul,
344
- 'ts_task_size' / Int64ul,
345
- 'ts_max_resident_size' / Int64ul,
346
- 'ts_suspend_count' / Int32ul,
347
- 'ts_faults' / Int32ul,
348
- 'ts_pageins' / Int32ul,
349
- 'ts_cow_faults' / Int32ul,
350
- 'ts_was_throttled' / Int32ul,
351
- 'ts_did_throttle' / Int32ul,
352
- 'ts_latency_qos' / Int32ul,
353
- 'ts_pid' / Int32ul,
354
- 'ts_p_comm' / Padded(32, CString('utf8')),
339
+ "obj"
340
+ / Struct(
341
+ "ts_unique_pid" / Int64ul,
342
+ "ts_ss_flags" / Int64ul,
343
+ "ts_user_time_in_terminated_thre" / Int64ul,
344
+ "ts_system_time_in_terminated_th" / Int64ul,
345
+ "ts_p_start_sec" / Int64ul,
346
+ "ts_task_size" / Int64ul,
347
+ "ts_max_resident_size" / Int64ul,
348
+ "ts_suspend_count" / Int32ul,
349
+ "ts_faults" / Int32ul,
350
+ "ts_pageins" / Int32ul,
351
+ "ts_cow_faults" / Int32ul,
352
+ "ts_was_throttled" / Int32ul,
353
+ "ts_did_throttle" / Int32ul,
354
+ "ts_latency_qos" / Int32ul,
355
+ "ts_pid" / Int32ul,
356
+ "ts_p_comm" / Padded(32, CString("utf8")),
355
357
  ),
356
358
  )
357
- jetsam_coalition = Struct(predefined_name_substruct, 'obj' / Int64ul)
359
+ jetsam_coalition = Struct(predefined_name_substruct, "obj" / Int64ul)
358
360
  STACKSHOT_IO_NUM_PRIORITIES = 4
359
361
  io_statistics = Struct(
360
362
  predefined_name_substruct,
361
- 'obj' / Struct(
362
- 'ss_disk_reads_count' / Int64ul,
363
- 'ss_disk_reads_size' / Int64ul,
364
- 'ss_disk_writes_count' / Int64ul,
365
- 'ss_disk_writes_size' / Int64ul,
366
- 'ss_io_priority_count' / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
367
- 'ss_io_priority_size' / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
368
- 'ss_paging_count' / Int64ul,
369
- 'ss_paging_size' / Int64ul,
370
- 'ss_non_paging_count' / Int32ul,
371
- 'ss_non_paging_size' / Int32ul,
372
- 'ss_data_count' / Int32ul,
373
- 'ss_data_size' / Int32ul,
374
- 'ss_metadata_count' / Int32ul,
375
- 'ss_metadata_size' / Int32ul,
363
+ "obj"
364
+ / Struct(
365
+ "ss_disk_reads_count" / Int64ul,
366
+ "ss_disk_reads_size" / Int64ul,
367
+ "ss_disk_writes_count" / Int64ul,
368
+ "ss_disk_writes_size" / Int64ul,
369
+ "ss_io_priority_count" / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
370
+ "ss_io_priority_size" / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
371
+ "ss_paging_count" / Int64ul,
372
+ "ss_paging_size" / Int64ul,
373
+ "ss_non_paging_count" / Int32ul,
374
+ "ss_non_paging_size" / Int32ul,
375
+ "ss_data_count" / Int32ul,
376
+ "ss_data_size" / Int32ul,
377
+ "ss_metadata_count" / Int32ul,
378
+ "ss_metadata_size" / Int32ul,
376
379
  ),
377
380
  )
378
381
  task_cpu_architecture = Struct(
379
382
  predefined_name_substruct,
380
- 'obj' / Struct(
381
- 'cputype' / Int32ul,
382
- 'cpusubtype' / Int32ul,
383
+ "obj"
384
+ / Struct(
385
+ "cputype" / Int32ul,
386
+ "cpusubtype" / Int32ul,
383
387
  ),
384
388
  )
385
389
  thread_snapshot = Struct(
386
390
  predefined_name_substruct,
387
- 'obj' / Struct(
388
- 'ths_thread_id' / Int64ul,
389
- 'ths_wait_event' / Int64ul,
390
- 'ths_continuation' / Int64ul,
391
- 'ths_total_syscalls' / Int64ul,
392
- 'ths_voucher_identifier' / Int64ul,
393
- 'ths_dqserialnum' / Int64ul,
394
- 'ths_user_time' / Int64ul,
395
- 'ths_sys_time' / Int64ul,
396
- 'ths_ss_flags' / Int64ul,
397
- 'ths_last_run_time' / Int64ul,
398
- 'ths_last_made_runnable_time' / Int64ul,
399
- 'ths_state' / Int32ul,
400
- 'ths_sched_flags' / Int32ul,
401
- 'ths_base_priority' / Int16ul,
402
- 'ths_sched_priority' / Int16ul,
403
- 'ths_eqos' / Byte,
404
- 'ths_rqos' / Byte,
405
- 'ths_rqos_override' / Byte,
406
- 'ths_io_tier' / Byte,
407
- 'ths_thread_t' / Int64ul,
408
- 'ths_requested_policy' / Int64ul,
409
- 'ths_effective_policy' / Int64ul,
391
+ "obj"
392
+ / Struct(
393
+ "ths_thread_id" / Int64ul,
394
+ "ths_wait_event" / Int64ul,
395
+ "ths_continuation" / Int64ul,
396
+ "ths_total_syscalls" / Int64ul,
397
+ "ths_voucher_identifier" / Int64ul,
398
+ "ths_dqserialnum" / Int64ul,
399
+ "ths_user_time" / Int64ul,
400
+ "ths_sys_time" / Int64ul,
401
+ "ths_ss_flags" / Int64ul,
402
+ "ths_last_run_time" / Int64ul,
403
+ "ths_last_made_runnable_time" / Int64ul,
404
+ "ths_state" / Int32ul,
405
+ "ths_sched_flags" / Int32ul,
406
+ "ths_base_priority" / Int16ul,
407
+ "ths_sched_priority" / Int16ul,
408
+ "ths_eqos" / Byte,
409
+ "ths_rqos" / Byte,
410
+ "ths_rqos_override" / Byte,
411
+ "ths_io_tier" / Byte,
412
+ "ths_thread_t" / Int64ul,
413
+ "ths_requested_policy" / Int64ul,
414
+ "ths_effective_policy" / Int64ul,
410
415
  ),
411
416
  )
412
- pth_name = Struct(predefined_name_substruct, 'obj' / Padded(64, CString('utf8')))
417
+ pth_name = Struct(predefined_name_substruct, "obj" / Padded(64, CString("utf8")))
413
418
  cpu_times = Struct(
414
419
  predefined_name_substruct,
415
- 'obj' / Struct(
416
- 'user_usec' / Int64ul,
417
- 'system_usec' / Int64ul,
418
- 'runnable_usec' / Int64ul,
420
+ "obj"
421
+ / Struct(
422
+ "user_usec" / Int64ul,
423
+ "system_usec" / Int64ul,
424
+ "runnable_usec" / Int64ul,
419
425
  ),
420
426
  )
421
- thread_group = Struct(predefined_name_substruct, 'obj' / Int64ul)
422
- kernel_stack_frames = Struct(predefined_name_substruct, 'obj' / Struct('lr' / Int64ul))
427
+ thread_group = Struct(predefined_name_substruct, "obj" / Int64ul)
428
+ kernel_stack_frames = Struct(predefined_name_substruct, "obj" / Struct("lr" / Int64ul))
423
429
  dyld_load_info64 = Struct(
424
430
  predefined_name_substruct,
425
- 'obj' / Struct(
426
- 'imageLoadAddress' / Int64ul,
427
- '_imageUUID' / Bytes(16),
428
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
431
+ "obj"
432
+ / Struct(
433
+ "imageLoadAddress" / Int64ul,
434
+ "_imageUUID" / Bytes(16),
435
+ "imageUUID" / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
429
436
  ),
430
437
  )
431
- user_stack_frames = Struct(predefined_name_substruct, 'obj' / Struct('lr' / Int64ul))
438
+ user_stack_frames = Struct(predefined_name_substruct, "obj" / Struct("lr" / Int64ul))
432
439
  jetsam_coalition_snapshot = Struct(
433
440
  predefined_name_substruct,
434
- 'obj' / Struct(
435
- 'jcs_id' / Int64ul,
436
- 'jcs_flags' / Int64ul,
437
- 'jcs_thread_group' / Int64ul,
438
- 'jcs_leader_task_uniqueid' / Int64ul,
441
+ "obj"
442
+ / Struct(
443
+ "jcs_id" / Int64ul,
444
+ "jcs_flags" / Int64ul,
445
+ "jcs_thread_group" / Int64ul,
446
+ "jcs_leader_task_uniqueid" / Int64ul,
439
447
  ),
440
448
  )
441
- donating_pids = Struct(predefined_name_substruct, 'obj' / Int32ul)
442
- dispatch_queue_label = Struct(predefined_name_substruct, 'obj' / CString('utf8'))
449
+ donating_pids = Struct(predefined_name_substruct, "obj" / Int32ul)
450
+ dispatch_queue_label = Struct(predefined_name_substruct, "obj" / CString("utf8"))
443
451
  stackshot_fault_stats = Struct(
444
452
  predefined_name_substruct,
445
- 'obj' / Struct(
446
- 'sfs_pages_faulted_in' / Int32ul,
447
- 'sfs_time_spent_faulting' / Int64ul,
448
- 'sfs_system_max_fault_time' / Int64ul,
449
- 'sfs_stopped_faulting' / Byte,
450
- )
453
+ "obj"
454
+ / Struct(
455
+ "sfs_pages_faulted_in" / Int32ul,
456
+ "sfs_time_spent_faulting" / Int64ul,
457
+ "sfs_system_max_fault_time" / Int64ul,
458
+ "sfs_stopped_faulting" / Byte,
459
+ ),
451
460
  )
452
461
 
453
462
  stackshot_duration = Struct(
454
463
  predefined_name_substruct,
455
- 'obj' / Struct(
456
- 'stackshot_duration' / Int64ul,
457
- 'stackshot_duration_outer' / Int64ul,
458
- )
464
+ "obj"
465
+ / Struct(
466
+ "stackshot_duration" / Int64ul,
467
+ "stackshot_duration_outer" / Int64ul,
468
+ ),
459
469
  )
460
470
 
461
471
  loadinfo64_text_exec = Struct(
462
472
  predefined_name_substruct,
463
- 'obj' / Struct(
464
- 'imageLoadAddress' / Int64ul,
465
- '_imageUUID' / Bytes(16),
466
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
473
+ "obj"
474
+ / Struct(
475
+ "imageLoadAddress" / Int64ul,
476
+ "_imageUUID" / Bytes(16),
477
+ "imageUUID" / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
467
478
  ),
468
479
  )
469
480
 
470
481
  user_async_stacklr64 = Struct(
471
482
  predefined_name_substruct,
472
- 'obj' / Struct(
473
- 'lr' / Int64ul,
483
+ "obj"
484
+ / Struct(
485
+ "lr" / Int64ul,
474
486
  ),
475
487
  )
476
488
 
477
489
  exclave_ipcstackentry_ecstack = Struct(
478
490
  predefined_name_substruct,
479
- 'obj' / Struct(
480
- 'addr' / Int64ul,
491
+ "obj"
492
+ / Struct(
493
+ "addr" / Int64ul,
481
494
  ),
482
495
  )
483
496
 
484
497
  exclave_textlayout_info = Struct(
485
498
  predefined_name_substruct,
486
- 'obj' / Struct(
487
- 'layout_id' / Int64ul,
488
- 'etl_flags' / Int64ul,
489
- 'sharedcache_index' / Int32ul,
499
+ "obj"
500
+ / Struct(
501
+ "layout_id" / Int64ul,
502
+ "etl_flags" / Int64ul,
503
+ "sharedcache_index" / Int32ul,
490
504
  ),
491
505
  )
492
506
 
493
507
  exclave_textlayout_segments = Struct(
494
508
  predefined_name_substruct,
495
- 'obj' / Struct(
496
- '_imageUUID' / Bytes(16),
497
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
498
- 'layoutSegment_loadAddress' / Int64ul,
499
- 'layoutSegment_rawLoadAddress' / Int64ul,
509
+ "obj"
510
+ / Struct(
511
+ "_imageUUID" / Bytes(16),
512
+ "imageUUID" / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
513
+ "layoutSegment_loadAddress" / Int64ul,
514
+ "layoutSegment_rawLoadAddress" / Int64ul,
500
515
  ),
501
516
  )
502
517
 
@@ -546,12 +561,11 @@ kcdata_types_structures = {
546
561
  }
547
562
 
548
563
  kcdata_item = Struct(
549
- 'type' / kcdata_types_enum,
550
- 'size' / Int32ul,
551
- 'flags' / Int64ul,
552
- 'data' / FixedSized(lambda ctx: ctx.size, Switch(
553
- lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes
554
- ))
564
+ "type" / kcdata_types_enum,
565
+ "size" / Int32ul,
566
+ "flags" / Int64ul,
567
+ "data"
568
+ / FixedSized(lambda ctx: ctx.size, Switch(lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes)),
555
569
  )
556
570
 
557
571
  kcdata = GreedyRange(kcdata_item)
@@ -559,7 +573,7 @@ kcdata = GreedyRange(kcdata_item)
559
573
 
560
574
  def clean(d):
561
575
  if isinstance(d, dict):
562
- return {k: clean(v) for k, v in d.items() if not k.startswith('_')}
576
+ return {k: clean(v) for k, v in d.items() if not k.startswith("_")}
563
577
  elif isinstance(d, list):
564
578
  return [clean(v) for v in d]
565
579
  else:
@@ -571,27 +585,28 @@ def jsonify_parsed_stackshot(stackshot, root=None, index=0):
571
585
  while True:
572
586
  item = stackshot[current_index]
573
587
  current_index += 1
574
- if item['type'] == kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT:
588
+ if item["type"] == kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT:
575
589
  # Stackshot root, return no more parsing required after this.
576
- root[item['data']['name']] = {}
577
- jsonify_parsed_stackshot(stackshot, root[item['data']['name']], current_index)
590
+ root[item["data"]["name"]] = {}
591
+ jsonify_parsed_stackshot(stackshot, root[item["data"]["name"]], current_index)
578
592
  return
579
- elif str(item['type']).startswith('KCDATA_TYPE_ARRAY_PAD'):
580
- root[item['data']['name']] = [i['obj'] for i in item['data']['obj']]
581
- elif item['type'] == kcdata_types_enum.KCDATA_TYPE_CONTAINER_BEGIN:
593
+ elif str(item["type"]).startswith("KCDATA_TYPE_ARRAY_PAD"):
594
+ root[item["data"]["name"]] = [i["obj"] for i in item["data"]["obj"]]
595
+ elif item["type"] == kcdata_types_enum.KCDATA_TYPE_CONTAINER_BEGIN:
582
596
  # Each container creates an entry in the container's dictionary with its unique id.
583
- if item['data']['name'] not in root:
584
- root[item['data']['name']] = {}
585
- root[item['data']['name']][item['data']['unique_id']] = {}
586
- current_index = jsonify_parsed_stackshot(stackshot, root[item['data']['name']][item['data']['unique_id']],
587
- current_index)
588
- elif item['type'] == kcdata_types_enum.KCDATA_TYPE_CONTAINER_END:
597
+ if item["data"]["name"] not in root:
598
+ root[item["data"]["name"]] = {}
599
+ root[item["data"]["name"]][item["data"]["unique_id"]] = {}
600
+ current_index = jsonify_parsed_stackshot(
601
+ stackshot, root[item["data"]["name"]][item["data"]["unique_id"]], current_index
602
+ )
603
+ elif item["type"] == kcdata_types_enum.KCDATA_TYPE_CONTAINER_END:
589
604
  return current_index
590
- elif item['type'] == kcdata_types_enum.KCDATA_TYPE_BUFFER_END:
605
+ elif item["type"] == kcdata_types_enum.KCDATA_TYPE_BUFFER_END:
591
606
  return
592
607
  else:
593
- if isinstance(item['data'], dict):
594
- root[item['data']['name']] = item['data']['obj']
608
+ if isinstance(item["data"], dict):
609
+ root[item["data"]["name"]] = item["data"]["obj"]
595
610
 
596
611
 
597
612
  STACKSHOT_HEADER = Int32ul.build(int(kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT))
@@ -611,7 +626,7 @@ class KdBufStream:
611
626
  def read(self, size):
612
627
  while size > len(self.current_chunk.getbuffer()) - self.current_chunk.tell():
613
628
  data = self.channel.receive_message()
614
- if data.startswith(b'bplist'):
629
+ if data.startswith(b"bplist"):
615
630
  continue
616
631
  if data.startswith(STACKSHOT_HEADER):
617
632
  continue
@@ -645,9 +660,10 @@ class CoreProfileSessionTap(Tap):
645
660
 
646
661
  This tap yields kdebug events.
647
662
  """
648
- IDENTIFIER = 'com.apple.instruments.server.services.coreprofilesessiontap'
649
663
 
650
- def __init__(self, dvt: DvtSecureSocketProxyService, time_config: dict, filters: set = None):
664
+ IDENTIFIER = "com.apple.instruments.server.services.coreprofilesessiontap"
665
+
666
+ def __init__(self, dvt: DvtSecureSocketProxyService, time_config: dict, filters: typing.Optional[set] = None):
651
667
  """
652
668
  :param dvt: Instruments service proxy.
653
669
  :param time_config: Timing information - numer, denom, mach_absolute_time and matching usecs_since_epoch,
@@ -659,17 +675,19 @@ class CoreProfileSessionTap(Tap):
659
675
  self.uuid = str(uuid.uuid4())
660
676
 
661
677
  if filters is None:
662
- filters = {0xffffffff}
678
+ filters = {0xFFFFFFFF}
663
679
  config = {
664
- 'tc': [{
665
- 'csd': 128, # Callstack frame depth.
666
- 'kdf2': filters, # Kdebug filter, receive all classes.
667
- 'ta': [[3], [0], [2], [1, 1, 0]], # Actions.
668
- 'tk': 3, # Kind.
669
- 'uuid': self.uuid,
670
- }], # Triggers configs
671
- 'rp': 100, # Recording priority
672
- 'bm': 0, # Buffer mode.
680
+ "tc": [
681
+ {
682
+ "csd": 128, # Callstack frame depth.
683
+ "kdf2": filters, # Kdebug filter, receive all classes.
684
+ "ta": [[3], [0], [2], [1, 1, 0]], # Actions.
685
+ "tk": 3, # Kind.
686
+ "uuid": self.uuid,
687
+ }
688
+ ], # Triggers configs
689
+ "rp": 100, # Recording priority
690
+ "bm": 0, # Buffer mode.
673
691
  }
674
692
  super().__init__(dvt, self.IDENTIFIER, config)
675
693
 
@@ -689,19 +707,19 @@ class CoreProfileSessionTap(Tap):
689
707
 
690
708
  stackshot = self.parse_stackshot(data)
691
709
 
692
- dsc_map = get_dsc_map(str(stackshot['shared_cache_dyld_load_info']['imageUUID']))
710
+ dsc_map = get_dsc_map(str(stackshot["shared_cache_dyld_load_info"]["imageUUID"]))
693
711
 
694
- for pid, snapshot in stackshot['task_snapshots'].items():
695
- for loaded_image in snapshot.get('dyld_load_info', []):
696
- image_uuid = str(loaded_image['imageUUID'])
712
+ for _pid, snapshot in stackshot["task_snapshots"].items():
713
+ for loaded_image in snapshot.get("dyld_load_info", []):
714
+ image_uuid = str(loaded_image["imageUUID"])
697
715
  if isinstance(dsc_map, dict) and image_uuid in dsc_map:
698
- loaded_image['imagePath'] = dsc_map[image_uuid]
716
+ loaded_image["imagePath"] = dsc_map[image_uuid]
699
717
 
700
718
  self.stack_shot = stackshot
701
719
 
702
720
  return self.stack_shot
703
721
 
704
- def dump(self, out: typing.BinaryIO, timeout: float = None):
722
+ def dump(self, out: typing.BinaryIO, timeout: typing.Optional[float] = None):
705
723
  """
706
724
  Dump data from core profile session to a file.
707
725
  :param out: File object to write data to.
@@ -710,10 +728,10 @@ class CoreProfileSessionTap(Tap):
710
728
  start = time.time()
711
729
  while timeout is None or time.time() <= start + timeout:
712
730
  data = self.channel.receive_message()
713
- if data.startswith(STACKSHOT_HEADER) or data.startswith(b'bplist'):
731
+ if data.startswith(STACKSHOT_HEADER) or data.startswith(b"bplist"):
714
732
  # Skip not kernel trace data.
715
733
  continue
716
- print(f'Receiving trace data ({len(data)}B)')
734
+ print(f"Receiving trace data ({len(data)}B)")
717
735
  out.write(data)
718
736
  out.flush()
719
737
 
@@ -739,10 +757,13 @@ class CoreProfileSessionTap(Tap):
739
757
  numer = time_info[1]
740
758
  denom = time_info[2]
741
759
 
742
- usecs_since_epoch = dvt.lockdown.get_value(key='TimeIntervalSince1970') * 1000000
743
- timezone_ = timezone(timedelta(seconds=dvt.lockdown.get_value(key='TimeZoneOffsetFromUTC')))
760
+ usecs_since_epoch = dvt.lockdown.get_value(key="TimeIntervalSince1970") * 1000000
761
+ timezone_ = timezone(timedelta(seconds=dvt.lockdown.get_value(key="TimeZoneOffsetFromUTC")))
744
762
 
745
- return dict(
746
- numer=numer, denom=denom, mach_absolute_time=mach_absolute_time, usecs_since_epoch=usecs_since_epoch,
747
- timezone=timezone_
748
- )
763
+ return {
764
+ "numer": numer,
765
+ "denom": denom,
766
+ "mach_absolute_time": mach_absolute_time,
767
+ "usecs_since_epoch": usecs_since_epoch,
768
+ "timezone": timezone_,
769
+ }