前言
学习逆向开发,必不可少要调试所逆向的工程,那么LLDB断点调试这个强大的功能是必不可少的,接下来介绍一下LLDB相关常见的功能
1、常用命令
- 添加断点(C语言)
$ breakpoint set -n XXXX(方法名)
set 是子命令
-n 是选项 是--name 的缩写!
成功之后如图:
这里是给test1方法添加了断点,显示了断点的信息,包括断点编号,位置,和内存地址
- 添加断点(OC)
$ breakpoint set -n "-[ViewController save:]" -n "-[ViewController pause:]" 可以同时添加多个断点
- 查看断点列表
$ breakpoint list
- 删除
$ breakpoint delete 组号
- 禁用/启用
$ breakpoint disable 禁用
$ breakpoint enable 启用
- 遍历整个项目中满足Game:这个字符的所有方法
$ breakpoint set -r Game:
2、流程控制
- 继续执行
$ continue 缩写:c
- 单步运行,将子函数当做整体一步执行
$ next 缩写:n
- 单步运行,遇到子函数会进去
$ s
常用命令
- 查看帮助:
help
- 查看某一个子命令帮助
如:help breakpoint
3、高级命令
- 所有方法全局方法添加断点
$ breakpoint set --selector touchesBegan:withEvent:
- 某个类的某个方法加断点
$ breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
4、设置代码
- 执行代码
expression self.view.subviews
expression 简写为p
除了常用的查看代码之外,还可以写代码修改数据,来快速不用编译查看效果,如需写多行代码用control+enter换行
5、添加内存断点(可以类比代码断点)
watchpoint set variable p1->_name
当对象地址发生改变的时候就会断在该内存地址p1是对象,_name是成员变量
watchpoint set expression 0x000000034f40a45
内存地址下断点
frame variable 查看内存信息
p &p1->_name 取对象属性地址
- 设置断点执行指令
break command add xx (xx为断点编号)
显示如下:
Enter your debugger command(s).Type 'DONE' to end
>po self
>po self.view
>DOWN
- 查看断点执行指令列表
break command list xx (xx为断点编号)
- stop-hook 让你在每次stop的时候去执行一些命令,只对breadpoint,watchpoint
- 在每次stop的时候执行一些命令
stop-hook 只对breakpoint、 watchpoint生效
$ target stop-hook add -o "frame variable" 设置完成之后,当有断点的时候直接执行引号内的指令,每断一次就执行一次(frame variable 表示方法参数)
$ target stop-hook list 查看列表
$ undisplay xxx(编号)去掉某一组hook
6、其他指令
$ image lookup -a 0x10389cd8f 查看某一内存地址对应方法
$ image lookup -t xxxx(类名) 快速查看某一个类
$ p
$ b -[xxx xxx] 某个类的某个方法加断点
$ x
$ register read
$ po