> 文章列表 > 14、lldb调试指令

14、lldb调试指令

14、lldb调试指令

LLDB

  • LLDB(Low Lever Debug): 默认内置于Xcode中的动态调试工具.标准的lldb提供了一组广泛的命令,旨在与老版本的GDB命令兼容.除了使用标准配置外,还可以很容易地自定义lldb以满足实际需要.

1.1 lldb语法:

<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument]...]

  • command> (命令)和 subcommand>(子命令): lldb调试命令的名称
  • action>: 执行命令的操作
  • options>: 命令选项
  • argument>: 命令的参数
  • []: 表示命令是可选的,可以有也可以没有

1.2 示例:

breakpoint set -n test

  • command: breakpoint 表示断点命令
  • action: set表示设置断点
  • option: -n表示根据方法name设置断点
  • argument: test表示方法名为test

1.3 断点设置

  • 在日常开发中,我们可以使用Xcode做断点设置、但是在逆向环境中,我们并没有第三方应用的源码,也不可能通过界面设置断点.这种情况下,只能使用breakpoint指令,在Xcode中lldb控制台,或直接在终端进行断点设置.
  • breakpoint set -n xxx: 对方法/函数名称设置断点
  • breakpoint set -r xxx: 对包含字符串的符号设置断点
  • breakpoint set --selector xxx: 对项目内指定名称的selector设置断点
  • breakpoint set --file xxx: 在指定文件中设置断点
  • breakpoint list: 查看断点列表
  • breakpoint disable: 禁用断点
  • breakpoint enable: 启用断点
  • breakpoint delete: 删除断点
  • 缩写: break、br、设置断点可缩写指令: b

1.4 代码执行

  • po指令: 意思是 print object, 用于打印对象,本质上调用了对象的 description
  • expression 指令: 用于执行代码
    • 缩写: exp、p
    • 可以使用标号
    • 可执行多行代码
  • 流程控制
    • c(continue)指令: 继续执行
    • n(next)指令: 单步运行,将子函数当作整体一步执行
    • ni指令: 单步运行,汇编级别
    • s指令: 单步运行,遇到子函数会进去
    • si指令: 单步运行可跳转指令内部,汇编级别
    • finish指令: 直接走完当前方法,返回到上层frame
  • 查看堆栈信息
    • bt指令: 查看函数调用栈
    • up指令: 查看上一个函数
    • down指令: 查看下一个函数
    • frame select指令: 选择指令函数
    • frame variable指令: 查看方法调用者、方法名称、参数和局部变量
    • thread return指令: 让方法直接返回,不执行里面的代码
  • 内存断点
    • watchpoint指令,设备内存断点
  • 其他指令
    • br command add指令: 给断点添加命令的命令
    • target stop-hook add -o “xxx”: 每次stop的时候去执行一些命令,针对breakpoint、watchpoint
    • 配置lldb初始化文件,当lldb启动,就会加载此文件,执行文件内的指令,一劳永逸.
  • lldb更多参考文档
    • https://lldb.llvm.org/python_reference/index.html
    • https://lldb.llvm.org/