mirror of
https://github.com/Karmaz95/Snake_Apple.git
synced 2026-03-30 14:00:16 +02:00
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
import lldb
|
|
|
|
def set_xpc_breaks(debugger, command, result, internal_dict):
|
|
"""
|
|
Set up tracing for XPC communication.
|
|
This includes breakpoints for sending/receiving messages and connection creation.
|
|
"""
|
|
target = debugger.GetSelectedTarget()
|
|
if not target:
|
|
result.PutCString("No target selected. Please attach to a process first.")
|
|
return
|
|
|
|
# List of XPC functions for setting breakpoints
|
|
send_functions = [
|
|
"xpc_connection_send_message",
|
|
"xpc_connection_send_message_with_reply",
|
|
"xpc_connection_send_message_with_reply_sync"
|
|
]
|
|
recv_function = "xpc_connection_set_event_handler"
|
|
connect_functions = [
|
|
"xpc_connection_create",
|
|
"xpc_connection_create_mach_service",
|
|
]
|
|
|
|
# Set breakpoints for XPC connection creation
|
|
for func in connect_functions:
|
|
bp = target.BreakpointCreateByName(func)
|
|
if bp.IsValid():
|
|
result.PutCString(f"Breakpoint set on {func}")
|
|
else:
|
|
result.PutCString(f"Failed to set breakpoint on {func}")
|
|
|
|
# Set breakpoints for sending functions
|
|
for func in send_functions:
|
|
bp = target.BreakpointCreateByName(func)
|
|
if bp.IsValid():
|
|
result.PutCString(f"Breakpoint set on {func}")
|
|
else:
|
|
result.PutCString(f"Failed to set breakpoint on {func}")
|
|
|
|
# Set breakpoint for receiving messages
|
|
bp_recv = target.BreakpointCreateByName(recv_function)
|
|
if bp_recv.IsValid():
|
|
result.PutCString(f"Breakpoint set on {recv_function}")
|
|
else:
|
|
result.PutCString(f"Failed to set breakpoint on {recv_function}")
|
|
|
|
def __lldb_init_module(debugger, internal_dict):
|
|
debugger.HandleCommand('command script add -f set_xpc_breaks.set_xpc_breaks set_xpc_breaks')
|
|
print("The 'set_xpc_breaks' command has been loaded. Use 'set_xpc_breaks' to set up XPC message tracing.")
|