pymobiledevice3 5.0.0__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 +466 -384
  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.0.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.0.dist-info/RECORD +0 -173
  140. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/WHEEL +0 -0
  141. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/entry_points.txt +0 -0
  142. {pymobiledevice3-5.0.0.dist-info → pymobiledevice3-5.0.2.dist-info}/licenses/LICENSE +0 -0
  143. {pymobiledevice3-5.0.0.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,431 +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_TASK_DELTA_SNAPSHOT': 0x940,
104
- 'STACKSHOT_KCTYPE_THREAD_DELTA_SNAPSHOT': 0x941,
105
- 'STACKSHOT_KCTYPE_UNKNOWN_0x942': 0x942,
106
- 'STACKSHOT_KCTYPE_UNKNOWN_0x943': 0x943,
107
-
108
- 'KCDATA_TYPE_BUFFER_END': 0xF19158ED,
109
-
110
- 'TASK_CRASHINFO_EXTMODINFO': 0x801,
111
- 'TASK_CRASHINFO_BSDINFOWITHUNIQID': 0x802,
112
- 'TASK_CRASHINFO_TASKDYLD_INFO': 0x803,
113
- 'TASK_CRASHINFO_UUID': 0x804,
114
- 'TASK_CRASHINFO_PID': 0x805,
115
- 'TASK_CRASHINFO_PPID': 0x806,
116
-
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,
117
141
  # Don't want anyone using this. It's struct rusage from whatever machine generated the data
118
142
  # 'TASK_CRASHINFO_RUSAGE': 0x807,
119
- 'Type_0x807': 0x807,
120
-
121
- 'TASK_CRASHINFO_RUSAGE_INFO': 0x808,
122
- 'TASK_CRASHINFO_PROC_NAME': 0x809,
123
- 'TASK_CRASHINFO_PROC_STARTTIME': 0x80B,
124
- 'TASK_CRASHINFO_USERSTACK': 0x80C,
125
- 'TASK_CRASHINFO_ARGSLEN': 0x80D,
126
- 'TASK_CRASHINFO_EXCEPTION_CODES': 0x80E,
127
- 'TASK_CRASHINFO_PROC_PATH': 0x80F,
128
- 'TASK_CRASHINFO_PROC_CSFLAGS': 0x810,
129
- 'TASK_CRASHINFO_PROC_STATUS': 0x811,
130
- 'TASK_CRASHINFO_UID': 0x812,
131
- 'TASK_CRASHINFO_GID': 0x813,
132
- 'TASK_CRASHINFO_PROC_ARGC': 0x814,
133
- 'TASK_CRASHINFO_PROC_FLAGS': 0x815,
134
- 'TASK_CRASHINFO_CPUTYPE': 0x816,
135
- 'TASK_CRASHINFO_WORKQUEUEINFO': 0x817,
136
- 'TASK_CRASHINFO_RESPONSIBLE_PID': 0x818,
137
- 'TASK_CRASHINFO_DIRTY_FLAGS': 0x819,
138
- 'TASK_CRASHINFO_CRASHED_THREADID': 0x81A,
139
- 'TASK_CRASHINFO_COALITION_ID': 0x81B,
140
- 'EXIT_REASON_SNAPSHOT': 0x1001,
141
- 'EXIT_REASON_USER_DESC': 0x1002,
142
- 'EXIT_REASON_USER_PAYLOAD': 0x1003,
143
- 'EXIT_REASON_CODESIGNING_INFO': 0x1004,
144
- 'EXIT_REASON_WORKLOOP_ID': 0x1005,
145
- 'EXIT_REASON_DISPATCH_QUEUE_NO': 0x1006,
146
- 'KCDATA_BUFFER_BEGIN_CRASHINFO': 0xDEADF157,
147
- 'KCDATA_BUFFER_BEGIN_DELTA_STACKSHOT': 0xDE17A59A,
148
- 'KCDATA_BUFFER_BEGIN_STACKSHOT': 0x59a25807,
149
- 'KCDATA_BUFFER_BEGIN_COMPRESSED': 0x434f4d50,
150
- 'KCDATA_BUFFER_BEGIN_OS_REASON': 0x53A20900,
151
- '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,
152
175
  }
153
176
 
154
177
  kcdata_types_enum = Enum(Int32ul, **kcdata_types)
155
178
 
156
179
  predefined_names = {
157
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_LEVEL: 'jetsam_level',
158
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_POLICY_VERSION: 'thread_policy_version',
159
- kcdata_types_enum.STACKSHOT_KCTYPE_KERN_PAGE_SIZE: 'kernel_page_size',
160
- kcdata_types_enum.STACKSHOT_KCTYPE_OSVERSION: 'osversion',
161
- kcdata_types_enum.STACKSHOT_KCTYPE_BOOTARGS: 'boot_args',
162
- kcdata_types_enum.KCDATA_TYPE_TIMEBASE: 'mach_timebase_info',
163
- kcdata_types_enum.KCDATA_TYPE_MACH_ABSOLUTE_TIME: 'mach_absolute_time',
164
- kcdata_types_enum.KCDATA_TYPE_USECS_SINCE_EPOCH: 'usecs_since_epoch',
165
- kcdata_types_enum.STACKSHOT_KCTYPE_SHAREDCACHE_LOADINFO: 'shared_cache_dyld_load_info',
166
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP_SNAPSHOT: 'thread_group_snapshot',
167
- kcdata_types_enum.STACKSHOT_KCCONTAINER_TASK: 'task_snapshots',
168
- kcdata_types_enum.STACKSHOT_KCCONTAINER_THREAD: 'thread_snapshots',
169
- kcdata_types_enum.STACKSHOT_KCTYPE_KERNELCACHE_LOADINFO: 'kernelcache_load_info',
170
- kcdata_types_enum.STACKSHOT_KCTYPE_TASK_SNAPSHOT: 'task_snapshot',
171
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION: 'jetsam_coalition',
172
- kcdata_types_enum.STACKSHOT_KCTYPE_IO_STATISTICS: 'io_statistics',
173
- kcdata_types_enum.STACKSHOT_KCTYPE_TASK_CPU_ARCHITECTURE: 'task_cpu_architecture',
174
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_SNAPSHOT: 'thread_snapshot',
175
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_NAME: 'pth_name',
176
- kcdata_types_enum.STACKSHOT_KCTYPE_CPU_TIMES: 'cpu_times',
177
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_GROUP: 'thread_group',
178
- kcdata_types_enum.STACKSHOT_KCTYPE_KERN_STACKLR64: 'kernel_stack_frames',
179
- kcdata_types_enum.KCDATA_TYPE_LIBRARY_LOADINFO64: 'dyld_load_info',
180
- kcdata_types_enum.STACKSHOT_KCTYPE_USER_STACKLR64: 'user_stack_frames',
181
- kcdata_types_enum.STACKSHOT_KCTYPE_JETSAM_COALITION_SNAPSHOT: 'jetsam_coalition_snapshot',
182
- kcdata_types_enum.STACKSHOT_KCTYPE_DONATING_PIDS: 'donating_pids',
183
- kcdata_types_enum.STACKSHOT_KCTYPE_THREAD_DISPATCH_QUEUE_LABEL: 'dispatch_queue_label',
184
- kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT: 'kcdata_stackshot',
185
- kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_FAULT_STATS: 'stackshot_fault_stats',
186
- kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_DURATION: 'stackshot_duration',
187
- kcdata_types_enum.STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC: 'dyld_load_info_text_exec',
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",
188
221
  }
189
222
 
190
- predefined_name_substruct = 'name' / Computed(lambda ctx: predefined_names[ctx._.type])
223
+ predefined_name_substruct = "name" / Computed(lambda ctx: predefined_names[ctx._.type])
191
224
 
192
225
  uint32_desc = Struct(
193
- 'name' / Padded(32, CString('utf8')),
194
- 'obj' / Int32ul,
226
+ "name" / Padded(32, CString("utf8")),
227
+ "obj" / Int32ul,
195
228
  )
196
229
 
197
230
  uint64_desc = Struct(
198
- 'name' / Padded(32, CString('utf8')),
199
- 'obj' / Int64ul,
231
+ "name" / Padded(32, CString("utf8")),
232
+ "obj" / Int64ul,
200
233
  )
201
234
 
202
- jetsam_level = Struct(predefined_name_substruct, 'obj' / Int32ul)
203
- thread_policy_version = Struct(predefined_name_substruct, 'obj' / Int32ul)
204
- kernel_page_size = Struct(predefined_name_substruct, 'obj' / Int32ul)
205
- osversion = Struct(predefined_name_substruct, 'obj' / CString('utf8'))
206
- 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"))
207
240
  mach_timebase_info = Struct(
208
241
  predefined_name_substruct,
209
- 'obj' / Struct(
210
- 'numer' / Int32ul,
211
- 'denom' / Int32ul,
212
- )
242
+ "obj"
243
+ / Struct(
244
+ "numer" / Int32ul,
245
+ "denom" / Int32ul,
246
+ ),
213
247
  )
214
- mach_absolute_time = Struct(predefined_name_substruct, 'obj' / Int64ul)
215
- 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)
216
250
  shared_cache_dyld_load_info = Struct(
217
251
  predefined_name_substruct,
218
- 'obj' / Struct(
219
- 'imageLoadAddress' / Int64ul,
220
- '_imageUUID' / Bytes(16),
221
- 'imageUUID' / Computed(lambda ctx: uuid.UUID(bytes=ctx._imageUUID)),
222
- '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,
223
258
  ),
224
259
  )
225
260
 
226
261
  thread_group_snapshot_trace_v2 = Struct(
227
- 'tgs_id' / Int64ul,
228
- '_tgs_name' / FixedSized(16, GreedyString('utf8')),
229
- 'tgs_name' / Computed(lambda ctx: ctx._tgs_name.strip('\x00')),
230
- '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,
231
266
  )
232
267
 
233
268
  thread_group_snapshot_trace_v3 = Struct(
234
- 'tgs_id' / Int64ul,
235
- '_tgs_name' / Bytes(16),
236
- 'tgs_flags' / Int64ul,
237
- '_tgs_name_cont' / Bytes(16),
238
- 'tgs_name' / Computed(
239
- 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")),
240
275
  )
241
276
 
242
277
  thread_group_snapshot = Struct(
243
278
  predefined_name_substruct,
244
- 'obj' / Switch(
279
+ "obj"
280
+ / Switch(
245
281
  lambda ctx: ctx._._.size // ctx._.count,
246
282
  {
247
283
  thread_group_snapshot_trace_v2.sizeof(): thread_group_snapshot_trace_v2,
248
284
  thread_group_snapshot_trace_v3.sizeof(): thread_group_snapshot_trace_v3,
249
- }
250
- )
285
+ },
286
+ ),
251
287
  )
252
288
  type_array_pad0 = Struct(
253
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
254
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
255
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
256
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
257
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
258
- lambda ctx: ctx.type,
259
- kcdata_types_structures,
260
- default=GreedyBytes
261
- ))),
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))),
262
295
  )
263
296
  type_array_pad4 = Struct(
264
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
265
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
266
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
267
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
268
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
269
- lambda ctx: ctx.type,
270
- kcdata_types_structures,
271
- default=GreedyBytes
272
- ))),
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))),
273
303
  Padding(4),
274
304
  )
275
305
  type_array_pad8 = Struct(
276
- 'flags_type' / Computed(lambda ctx: (ctx._.flags >> 32) & 0xffffffff),
277
- 'type' / Computed(lambda ctx: kcdata_types_enum.decmapping[ctx.flags_type]),
278
- 'count' / Computed(lambda ctx: ctx._.flags & 0xffffffff),
279
- 'name' / Computed(lambda ctx: predefined_names[ctx.type]),
280
- 'obj' / Array(this.count, LazyBound(lambda: Switch(
281
- lambda ctx: ctx.type,
282
- kcdata_types_structures,
283
- default=GreedyBytes
284
- ))),
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))),
285
312
  Padding(8),
286
313
  )
287
314
  type_array_padc = 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
- 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),
298
322
  )
299
323
  type_container_begin = Struct(
300
- 'obj' / kcdata_types_enum,
301
- 'name' / Computed(lambda ctx: predefined_names.get(ctx.obj, 'unknown')),
302
- '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),
303
327
  )
304
328
  kernelcache_load_info = Struct(
305
329
  predefined_name_substruct,
306
- 'obj' / Struct(
307
- 'imageLoadAddress' / Int64ul,
308
- '_imageUUID' / Bytes(16),
309
- '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)),
310
335
  ),
311
336
  )
312
337
  task_snapshot = Struct(
313
338
  predefined_name_substruct,
314
- 'obj' / Struct(
315
- 'ts_unique_pid' / Int64ul,
316
- 'ts_ss_flags' / Int64ul,
317
- 'ts_user_time_in_terminated_thre' / Int64ul,
318
- 'ts_system_time_in_terminated_th' / Int64ul,
319
- 'ts_p_start_sec' / Int64ul,
320
- 'ts_task_size' / Int64ul,
321
- 'ts_max_resident_size' / Int64ul,
322
- 'ts_suspend_count' / Int32ul,
323
- 'ts_faults' / Int32ul,
324
- 'ts_pageins' / Int32ul,
325
- 'ts_cow_faults' / Int32ul,
326
- 'ts_was_throttled' / Int32ul,
327
- 'ts_did_throttle' / Int32ul,
328
- 'ts_latency_qos' / Int32ul,
329
- 'ts_pid' / Int32ul,
330
- '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")),
331
357
  ),
332
358
  )
333
- jetsam_coalition = Struct(predefined_name_substruct, 'obj' / Int64ul)
359
+ jetsam_coalition = Struct(predefined_name_substruct, "obj" / Int64ul)
334
360
  STACKSHOT_IO_NUM_PRIORITIES = 4
335
361
  io_statistics = Struct(
336
362
  predefined_name_substruct,
337
- 'obj' / Struct(
338
- 'ss_disk_reads_count' / Int64ul,
339
- 'ss_disk_reads_size' / Int64ul,
340
- 'ss_disk_writes_count' / Int64ul,
341
- 'ss_disk_writes_size' / Int64ul,
342
- 'ss_io_priority_count' / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
343
- 'ss_io_priority_size' / Array(STACKSHOT_IO_NUM_PRIORITIES, Int64ul),
344
- 'ss_paging_count' / Int64ul,
345
- 'ss_paging_size' / Int64ul,
346
- 'ss_non_paging_count' / Int32ul,
347
- 'ss_non_paging_size' / Int32ul,
348
- 'ss_data_count' / Int32ul,
349
- 'ss_data_size' / Int32ul,
350
- 'ss_metadata_count' / Int32ul,
351
- '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,
352
379
  ),
353
380
  )
354
381
  task_cpu_architecture = Struct(
355
382
  predefined_name_substruct,
356
- 'obj' / Struct(
357
- 'cputype' / Int32ul,
358
- 'cpusubtype' / Int32ul,
383
+ "obj"
384
+ / Struct(
385
+ "cputype" / Int32ul,
386
+ "cpusubtype" / Int32ul,
359
387
  ),
360
388
  )
361
389
  thread_snapshot = Struct(
362
390
  predefined_name_substruct,
363
- 'obj' / Struct(
364
- 'ths_thread_id' / Int64ul,
365
- 'ths_wait_event' / Int64ul,
366
- 'ths_continuation' / Int64ul,
367
- 'ths_total_syscalls' / Int64ul,
368
- 'ths_voucher_identifier' / Int64ul,
369
- 'ths_dqserialnum' / Int64ul,
370
- 'ths_user_time' / Int64ul,
371
- 'ths_sys_time' / Int64ul,
372
- 'ths_ss_flags' / Int64ul,
373
- 'ths_last_run_time' / Int64ul,
374
- 'ths_last_made_runnable_time' / Int64ul,
375
- 'ths_state' / Int32ul,
376
- 'ths_sched_flags' / Int32ul,
377
- 'ths_base_priority' / Int16ul,
378
- 'ths_sched_priority' / Int16ul,
379
- 'ths_eqos' / Byte,
380
- 'ths_rqos' / Byte,
381
- 'ths_rqos_override' / Byte,
382
- 'ths_io_tier' / Byte,
383
- 'ths_thread_t' / Int64ul,
384
- 'ths_requested_policy' / Int64ul,
385
- '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,
386
415
  ),
387
416
  )
388
- pth_name = Struct(predefined_name_substruct, 'obj' / Padded(64, CString('utf8')))
417
+ pth_name = Struct(predefined_name_substruct, "obj" / Padded(64, CString("utf8")))
389
418
  cpu_times = Struct(
390
419
  predefined_name_substruct,
391
- 'obj' / Struct(
392
- 'user_usec' / Int64ul,
393
- 'system_usec' / Int64ul,
394
- 'runnable_usec' / Int64ul,
420
+ "obj"
421
+ / Struct(
422
+ "user_usec" / Int64ul,
423
+ "system_usec" / Int64ul,
424
+ "runnable_usec" / Int64ul,
395
425
  ),
396
426
  )
397
- thread_group = Struct(predefined_name_substruct, 'obj' / Int64ul)
398
- 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))
399
429
  dyld_load_info64 = Struct(
400
430
  predefined_name_substruct,
401
- 'obj' / Struct(
402
- 'imageLoadAddress' / Int64ul,
403
- '_imageUUID' / Bytes(16),
404
- '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)),
405
436
  ),
406
437
  )
407
- user_stack_frames = Struct(predefined_name_substruct, 'obj' / Struct('lr' / Int64ul))
438
+ user_stack_frames = Struct(predefined_name_substruct, "obj" / Struct("lr" / Int64ul))
408
439
  jetsam_coalition_snapshot = Struct(
409
440
  predefined_name_substruct,
410
- 'obj' / Struct(
411
- 'jcs_id' / Int64ul,
412
- 'jcs_flags' / Int64ul,
413
- 'jcs_thread_group' / Int64ul,
414
- '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,
415
447
  ),
416
448
  )
417
- donating_pids = Struct(predefined_name_substruct, 'obj' / Int32ul)
418
- 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"))
419
451
  stackshot_fault_stats = Struct(
420
452
  predefined_name_substruct,
421
- 'obj' / Struct(
422
- 'sfs_pages_faulted_in' / Int32ul,
423
- 'sfs_time_spent_faulting' / Int64ul,
424
- 'sfs_system_max_fault_time' / Int64ul,
425
- 'sfs_stopped_faulting' / Byte,
426
- )
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
+ ),
427
460
  )
428
461
 
429
462
  stackshot_duration = Struct(
430
463
  predefined_name_substruct,
431
- 'obj' / Struct(
432
- 'stackshot_duration' / Int64ul,
433
- 'stackshot_duration_outer' / Int64ul,
434
- )
464
+ "obj"
465
+ / Struct(
466
+ "stackshot_duration" / Int64ul,
467
+ "stackshot_duration_outer" / Int64ul,
468
+ ),
435
469
  )
436
470
 
437
471
  loadinfo64_text_exec = Struct(
438
472
  predefined_name_substruct,
439
- 'obj' / Struct(
440
- 'imageLoadAddress' / Int64ul,
441
- '_imageUUID' / Bytes(16),
442
- '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)),
478
+ ),
479
+ )
480
+
481
+ user_async_stacklr64 = Struct(
482
+ predefined_name_substruct,
483
+ "obj"
484
+ / Struct(
485
+ "lr" / Int64ul,
486
+ ),
487
+ )
488
+
489
+ exclave_ipcstackentry_ecstack = Struct(
490
+ predefined_name_substruct,
491
+ "obj"
492
+ / Struct(
493
+ "addr" / Int64ul,
494
+ ),
495
+ )
496
+
497
+ exclave_textlayout_info = Struct(
498
+ predefined_name_substruct,
499
+ "obj"
500
+ / Struct(
501
+ "layout_id" / Int64ul,
502
+ "etl_flags" / Int64ul,
503
+ "sharedcache_index" / Int32ul,
504
+ ),
505
+ )
506
+
507
+ exclave_textlayout_segments = Struct(
508
+ predefined_name_substruct,
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,
443
515
  ),
444
516
  )
445
517
 
@@ -482,15 +554,18 @@ kcdata_types_structures = {
482
554
  kcdata_types_enum.KCDATA_TYPE_BUFFER_END: Pass,
483
555
  kcdata_types_enum.STACKSHOT_KCTYPE_STACKSHOT_DURATION: stackshot_duration,
484
556
  kcdata_types_enum.STACKSHOT_KCTYPE_LOADINFO64_TEXT_EXEC: loadinfo64_text_exec,
557
+ kcdata_types_enum.STACKSHOT_KCTYPE_USER_ASYNC_STACKLR64: user_async_stacklr64,
558
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_IPCSTACKENTRY_ECSTACK: exclave_ipcstackentry_ecstack,
559
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_INFO: exclave_textlayout_info,
560
+ kcdata_types_enum.STACKSHOT_KCTYPE_EXCLAVE_TEXTLAYOUT_SEGMENTS: exclave_textlayout_segments,
485
561
  }
486
562
 
487
563
  kcdata_item = Struct(
488
- 'type' / kcdata_types_enum,
489
- 'size' / Int32ul,
490
- 'flags' / Int64ul,
491
- 'data' / FixedSized(lambda ctx: ctx.size, Switch(
492
- lambda ctx: ctx.type, kcdata_types_structures, default=GreedyBytes
493
- ))
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)),
494
569
  )
495
570
 
496
571
  kcdata = GreedyRange(kcdata_item)
@@ -498,7 +573,7 @@ kcdata = GreedyRange(kcdata_item)
498
573
 
499
574
  def clean(d):
500
575
  if isinstance(d, dict):
501
- 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("_")}
502
577
  elif isinstance(d, list):
503
578
  return [clean(v) for v in d]
504
579
  else:
@@ -510,27 +585,28 @@ def jsonify_parsed_stackshot(stackshot, root=None, index=0):
510
585
  while True:
511
586
  item = stackshot[current_index]
512
587
  current_index += 1
513
- if item['type'] == kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT:
588
+ if item["type"] == kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT:
514
589
  # Stackshot root, return no more parsing required after this.
515
- root[item['data']['name']] = {}
516
- 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)
517
592
  return
518
- elif str(item['type']).startswith('KCDATA_TYPE_ARRAY_PAD'):
519
- root[item['data']['name']] = [i['obj'] for i in item['data']['obj']]
520
- 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:
521
596
  # Each container creates an entry in the container's dictionary with its unique id.
522
- if item['data']['name'] not in root:
523
- root[item['data']['name']] = {}
524
- root[item['data']['name']][item['data']['unique_id']] = {}
525
- current_index = jsonify_parsed_stackshot(stackshot, root[item['data']['name']][item['data']['unique_id']],
526
- current_index)
527
- 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:
528
604
  return current_index
529
- elif item['type'] == kcdata_types_enum.KCDATA_TYPE_BUFFER_END:
605
+ elif item["type"] == kcdata_types_enum.KCDATA_TYPE_BUFFER_END:
530
606
  return
531
607
  else:
532
- if isinstance(item['data'], dict):
533
- root[item['data']['name']] = item['data']['obj']
608
+ if isinstance(item["data"], dict):
609
+ root[item["data"]["name"]] = item["data"]["obj"]
534
610
 
535
611
 
536
612
  STACKSHOT_HEADER = Int32ul.build(int(kcdata_types_enum.KCDATA_BUFFER_BEGIN_STACKSHOT))
@@ -550,7 +626,7 @@ class KdBufStream:
550
626
  def read(self, size):
551
627
  while size > len(self.current_chunk.getbuffer()) - self.current_chunk.tell():
552
628
  data = self.channel.receive_message()
553
- if data.startswith(b'bplist'):
629
+ if data.startswith(b"bplist"):
554
630
  continue
555
631
  if data.startswith(STACKSHOT_HEADER):
556
632
  continue
@@ -584,9 +660,10 @@ class CoreProfileSessionTap(Tap):
584
660
 
585
661
  This tap yields kdebug events.
586
662
  """
587
- IDENTIFIER = 'com.apple.instruments.server.services.coreprofilesessiontap'
588
663
 
589
- 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):
590
667
  """
591
668
  :param dvt: Instruments service proxy.
592
669
  :param time_config: Timing information - numer, denom, mach_absolute_time and matching usecs_since_epoch,
@@ -598,17 +675,19 @@ class CoreProfileSessionTap(Tap):
598
675
  self.uuid = str(uuid.uuid4())
599
676
 
600
677
  if filters is None:
601
- filters = {0xffffffff}
678
+ filters = {0xFFFFFFFF}
602
679
  config = {
603
- 'tc': [{
604
- 'csd': 128, # Callstack frame depth.
605
- 'kdf2': filters, # Kdebug filter, receive all classes.
606
- 'ta': [[3], [0], [2], [1, 1, 0]], # Actions.
607
- 'tk': 3, # Kind.
608
- 'uuid': self.uuid,
609
- }], # Triggers configs
610
- 'rp': 100, # Recording priority
611
- '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.
612
691
  }
613
692
  super().__init__(dvt, self.IDENTIFIER, config)
614
693
 
@@ -628,19 +707,19 @@ class CoreProfileSessionTap(Tap):
628
707
 
629
708
  stackshot = self.parse_stackshot(data)
630
709
 
631
- 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"]))
632
711
 
633
- for pid, snapshot in stackshot['task_snapshots'].items():
634
- for loaded_image in snapshot.get('dyld_load_info', []):
635
- 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"])
636
715
  if isinstance(dsc_map, dict) and image_uuid in dsc_map:
637
- loaded_image['imagePath'] = dsc_map[image_uuid]
716
+ loaded_image["imagePath"] = dsc_map[image_uuid]
638
717
 
639
718
  self.stack_shot = stackshot
640
719
 
641
720
  return self.stack_shot
642
721
 
643
- def dump(self, out: typing.BinaryIO, timeout: float = None):
722
+ def dump(self, out: typing.BinaryIO, timeout: typing.Optional[float] = None):
644
723
  """
645
724
  Dump data from core profile session to a file.
646
725
  :param out: File object to write data to.
@@ -649,10 +728,10 @@ class CoreProfileSessionTap(Tap):
649
728
  start = time.time()
650
729
  while timeout is None or time.time() <= start + timeout:
651
730
  data = self.channel.receive_message()
652
- if data.startswith(STACKSHOT_HEADER) or data.startswith(b'bplist'):
731
+ if data.startswith(STACKSHOT_HEADER) or data.startswith(b"bplist"):
653
732
  # Skip not kernel trace data.
654
733
  continue
655
- print(f'Receiving trace data ({len(data)}B)')
734
+ print(f"Receiving trace data ({len(data)}B)")
656
735
  out.write(data)
657
736
  out.flush()
658
737
 
@@ -678,10 +757,13 @@ class CoreProfileSessionTap(Tap):
678
757
  numer = time_info[1]
679
758
  denom = time_info[2]
680
759
 
681
- usecs_since_epoch = dvt.lockdown.get_value(key='TimeIntervalSince1970') * 1000000
682
- 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")))
683
762
 
684
- return dict(
685
- numer=numer, denom=denom, mach_absolute_time=mach_absolute_time, usecs_since_epoch=usecs_since_epoch,
686
- timezone=timezone_
687
- )
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
+ }