美文网首页
LLDB常用命令

LLDB常用命令

作者: 正_文 | 来源:发表于2020-09-17 14:08 被阅读0次

    LLDB全称Low Level Debugger,是内置于Xcode中的动态调试工具,是我们开发中必不可少的工具。
    查看指令,进入LLDB模式,输入help命令回车;查看指令帮助:

    image.png

    一、设置断点

    breakpoint set -n test1:为test1方法添加断点,-n等同于--name
    breakpoint set -n test1 -n “-[ViewController save]”
    breakpoint list:为多个方法添加断点

    breakpoint disable 1 :第一组断点失效
    breakpoint disable 1.1 : 第一组第一个失效
    breakpoint enable 1:第一组断点可用

    breakpoint delete 1.1
    breakpoint set —selector touchesBegan:withEvent:
    breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
    breakpoint set -r Game:: 满足包含Game:这个字符的方法都添加断点

    c :继续,continue的缩写。
    s:单步走, step的简写,遇到嵌套子函数会进去。
    n:单步运,next的简写,遇到嵌套子函数会当做整体一步执行。

    b eatWithObject: :为eatWithObject:方法添加断点
    b -a 0x000006329093: 为地址为0x000006329093的方法添加断点

    二、执行代码

    expression self:注意p == expressionpo == expression -o
    查看帮助指令:

    image.png

    我们也可以通过p指令,修改函数参数值,如:p str = @"2222"

    三、函数调用栈

    btthread backtrace的简写,函数调用栈
    up & down:跳转到前一个、后一个方法
    frame select 1:通过调用栈编号,跳转到对应方法

    frame variable :查看当前方法的局部变量,即方法参数
    thread return :线程代码回滚,而且可以修改参数,但会在上一个方法return,不在继续执行

    四、 image命令

    image list ,查看当前进程加载了哪些库:

    image.png

    0x0000000109caa000:这个地址是mach-o的真实内存首地址,即ASLR
    逆向开发时,某个方法或者变量的真实地址获取方法:真实地址 = mach-o地址 + ASLR。注意,这里需要减去一个pageZero0x100000000,64 位下是 4个G),因为所有地址都会加上pageZero。
    image list -o -f: 查看所有进程、库
    image lookup -t Person,查看类对象的内存详情:

    image.png

    五、内存断点

    watchpoint set variable p1->_name
    watchpoint set expression 0x000006329093

    image.png

    breakpoint command add 1 :为第一组断点添加命令
    breakpoint command delete 1
    breakpoint command list

    image.png

    六、全局断点

    target stop-hook add -o "frame variable" :为所有断点添加命令,打印方法所有变量
    target stop-hook list
    target stop-hook delete :删除所有全局断点
    undisplay 2 :全局断点第二个不可用

    image.png

    六、逆向 断点

    6.1 首先将mach-o文件在hopper中打开
    image.png

    找到eatWithObject:在mach-o中的内存地址100001cd0

    6.2 aslr地址

    mach-o内存的首地址:0x000000010735d000,参考上面的image list指令

    image.png
    6.3 方法物理地址 = ASLR + 虚拟地址

    0x000000010735d000 + 0x1cd0 = 0x10735ECD0

    image.png

    七、自动启动LLDB命令

    终端根目录,ls -a,找到.lldbinit文件。

    image.png

    如果没有,就自己vim创建一个,然后添加代码

    target stop-hook add -o "frame variable"
    

    当然你也可以添加其他命令。然后打开一个项目,添加一个断点,运行,即会打印该方法的参数变量。
    注意:.lldbinit文件,全局有效,在Xcode启动时自动执行,会影响所有的项目。

    这个文件影响的是LLDB应用,不是Xcode,终端输入lldb指令,可以直接进入lldb模式,通过process 进程id,也可以直接调试应用。

    相关文章

      网友评论

          本文标题:LLDB常用命令

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