网站建设组织管理怎么写百度最新秒收录方法2023
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/