调试Xcode

作者: 笑破天 | 来源:发表于2022-08-04 17:43 被阅读0次

    Xcode功能很强大,经常疑惑于Xcode的一些功能是怎么实现的

    1.禁用Rootless 与开启调试功能

    为了提高系统的安全性,Mac OS X 10.11开始引入了Rootless(System Integrity Protection),在Rootless开启的情况下,LLDB无法调试到其它进程(模拟器内的进程除外).如果想调试其它进程,需要关闭Rootless.

    lldb -n Finder
    error: attach failed: cannot attach to process due to System Integrity Protection
    

    M1恢复模式+禁用Rootless:
    关机,长按开机按键15s左右,选项,选择管理员用户输入密码,顶部菜单中找到 Utilities 菜单并选择 Terminal,输入以下命令

    csrutil disable // 禁用
    reboot // 重启
    

    2. attach Xcode

    1. 打开一个终端标签页(cmd+t),按下cmd+shift+i设置标签标题为LLDB,另开一个标签页,起名为Xcode stderr。命名只是为了方便区分,标签名字不同与此,可通过tty命令查看,后续重定向process log会用到。通过命令echo "hello debugger" 1>/dev/ttys002来验证tty可用性。(该步骤非必须)

    2.进入lldb,退出是ctrl+d

    3.绑定目标可执行文件路径

    (lldb) file /Applications/Xcode.app/Contents/MacOS/Xcode
    Current executable set to '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64).
    

    其中/Applications/Xcode.app/Contents/MacOS/Xcode为Xcode的可执行路径,在Xcode打开的情况下可以通过命令ps -ef `pgrep -x Xcode`获取

    4.启动并重定向到终端ttys002

    (lldb) process launch -e /dev/ttys002 --
    Process 92898 launched: '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64)
    

    至此,已成功attach上Xcode了

    3. 调试Xcode

    lldb 进入lldb
    ctrl+d 退出lldb
    ctrl+c 进入断点模式
    c 跳过断点
    (lldb) b -[NSView hitTest:] 设置断点
    (lldb) po $rdi 打印mac构架寄存器
    (lldb) po [[[$rdi superclass] superclass] superclass]
    (lldb) help breakpoint 帮助命令
    

    4. Xcode debug app怎么实现内存监控

    通过Accessibility Inspector(Xcode自带)去审查,发现类型为NSTextFieldCell

    遇到问题

    1、lldb -n "Xcode"报错

    (lldb) process attach --name "Xcode"
    error: attach failed: attach failed ((os/kern) invalid argument)
    

    参考:
    小试 Xcode 逆向:App 内存监控原理初探
    LLDB 学习笔记
    深入iOS系统底层之CPU寄存器介绍

    相关文章

      网友评论

        本文标题:调试Xcode

        本文链接:https://www.haomeiwen.com/subject/qbaywrtx.html