[Python] LLDB breaks on adding a breakpoint using python

Discussão em 'Python' iniciado por Stack, Março 19, 2025.

  1. Stack

    Stack Membro Participativo

    I want a LLDB breakpoint callback to add another breakpoint on the next frame in the callstack.

    For this I have a file trace_mvp.py with the following code:

    import lldb

    def syscall_callback(frame: lldb.SBFrame, bp_loc, internal_dict):
    print("[+] Entering syscall_callback")
    thread = frame.GetThread()

    # print backtrace for debug
    for frame in thread.get_thread_frames():
    print(frame)

    # address of the next frame
    next_frame_pc = thread.get_thread_frames()[1].GetPC()

    print("[+] Add breakpoint at : ", hex(next_frame_pc))
    target = thread.GetProcess().GetTarget()
    bp = target.BreakpointCreateByAddress(next_frame_pc)
    bp.SetScriptCallbackFunction("trace_mvp.bp_callback")
    print(bp)


    def bp_callback(frame: lldb.SBFrame, bp_loc, internal_dict):
    print("[+] Hello from bp_callback")

    def __lldb_init_module(debugger, internal_dict):
    debugger.HandleCommand('breakpoint set -n write')
    debugger.HandleCommand('breakpoint command add -s python -F trace_mvp.syscall_callback')
    debugger.HandleCommand('run')


    This code adds a breakpoint on all write syscall. Then, at each stop it is supposed to add another breakpoint on the frame above in the stack, and print a message when it reaches it.

    On the side I have a small Python file with a single print

    print("Hello world")


    In the terminal I run

    # in bash
    lldb python hello_world.py
    # inside LLDB
    command script import trace_mvp.py


    On running the syscall_callback the breakpoint is added to the right address (here 0x101328b74) but LLDB still raises an error

    Breakpoint 1: 137 locations.
    Process 8128 launched: '/Users/macm1/.venv/bin/python' (arm64)
    14 locations added to breakpoint 1
    frame #0: 0x0000000188f758ec libsystem_kernel.dylib`write
    frame #1: 0x0000000101328b74 libpython3.11.dylib`_Py_write_impl + 128
    [rest of the stack]
    [+] Add breakpoint at : 0x101328b74
    SBBreakpoint: id = 2, address = libpython3.11.dylib[0x0000000000174b74], locations = 1
    Traceback (most recent call last):
    File "<string>", line 8, in lldb_autogen_python_bp_callback_func__0
    KeyError: 'lldb_autogen_python_bp_callback_func__1'
    Process 8128 stopped


    When I set the wrong function name on purpose, the error is not raised.

    Am I doing something wrong or is it a bug from LLDB?

    I'm running on macOS 15.1 with LLDB lldb-1600.0.39.109

    Continue reading...

Compartilhe esta Página