LLDB 使用

2018/5/3 posted in  逆向与安全

LLDB(Low Lever Debug)命令结构

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

其中:

  1. (命令)和(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。
  2. :我们想在前面的命令序列的上下文中执行的一些操作。
  3. :行为修改器(action modifiers)。通常带有一些值。
  4. :根据使用的命令的上下文来表示各种不同的东西。

设置断点

  • breakpoint
$ breakpoint set -n [方法字符串]

例如:
$ breakpoint set -n "viewDidLoad"

`其中 -n 是 --name缩写`
  • 显示当前断点
$ breakpoint list
  • 禁用
$ breakpoint disable [编号]
  • 启用
$ breakpoint enable [编号]
  • 删除(只能按组删除,不能删除组中的某个)
$ breakpoint delete 【编号】
  • 根据selector方法设置断点
$ breakpoint set —-selector [方法]

例如:
$ breakpoint set --selector dealloc
  • 根据某个文件中的selector方法设置断点
$ breakpoint set —file [文件] —-selector [方法]
  • 遍历项目中所有包含 testFunc 字符串的方法并设置断点
$ breakpoint set -r [方法字符串]

例如:
$ breakpoint set -r "testFunc"

流程控制

  • 继续执行
$ c continue
  • 单步运行,将子函数当做整体一步执行
$ n next
  • 单步运行,遇到子函数会进去
$ s 
  • 按住 ctrl 汇编级别
$ ni
$ si

expresion

执行代码,例如当你需要改变一些东西,但是因为某种原因不能编译

$ expresion [代码]

例:

$ expression self.view.backgroundColor = [UIColor redColor];

换行ctrl+enter

调用栈 bt

Show the current thread's call stack.

  • 显示调用栈
$ bt
  • 上一个方法的调用者
$ up
  • 下一个方法的调用者
$ down
  • 调到指定调用者
$ frame select [bt 显示的frame 编号]

watchpoint

内存断点,断点对象属性,类似kvo

根据变量名称

$ watchpoint set variable  [self->name]

根据内存地址

$ watchpoint set expresion  [内存地址]

breakpoint command

  • 断点触发 指令(触发时执行指令添加)
$ break command add [编号]

例如:

(lldb) breakpoint command add 5.1
Enter your debugger command(s).  Type 'DONE' to end.
> 
  • 查看
$ break command list [编号]
  • 删除
$ break command delete [编号]

target stop-hook

每次stop的时候去执行一些命令,只对breakpoint,watchpoint有效

//每次stop执行frame variable
$ target stop-hook add -o "frame variable" 

$ target stop-hook list

$ target stop-hook delete

frame

  • Print out a list of all variables in the current frame
$ frame variable
  • Need to know where you are?
$ frame info

thread

  • 代码回滚,之后代码将不会执行
$ thread return

.lldbinit 文件配置

目录 /Users/caolongjian/.lldbinit
lldb每次启动都会调用,用于导入配置文件

其他常用

  • 数组越界崩溃信息查看
$ image lookup -a [地址0x]
  • 快速查看类
$ image lookup -t [类 Person]
  • List current executable and dependent shared library images.
$ image list

help

获取帮助信息
help <command-name>help <command-name> <option>

$ help
$ help breakpoint