08-2-iOS逆向之常用的LLDB指令

1. 命令格式、help

1.1 指令的格式

<command> [<subcommand> [<subcommand>. . .]] <action> [-options [option-value]] 
	[argument [argument... ] ]
  • command : 命令
  • subcommand : 子命令
  • action : 命令操作
  • options : 命令选项
  • argument : 命令参数
  • 比如给test函数设置断点
    breakpoint set -n test
    
    • breakpoint : 命令
    • set : 子命令
    • -n : 等价于--name, 命令选项
    • test : 参数

1.2 help

  • 查看指令的用法
  • 比如help breakpointhelp breakpoint set
    在这里插入图片描述

2. expression

  • Syntax 语法
 expression <cmd-options> -- <expr>
  • 执行一个表达式

    • cmd-options : 命令选项
    • -- : 命令选项结束符,表示所有的命令选项已经设置完毕,如果没有命令选项,-- 可以省略
    • expr : 需要执行的表达式
  • 举例

expression self.view.backgroundColor = [UIColor redColor]
  • expressionexpression -- 和指令 printpcall 的效果一样
  • expression -O --和指令 po 的效果一样
    -O : --object-description

3. thread

3.1 thread backtrace

  • 打印线程的堆栈信息
  • 和指令 bt 的效果一样
    在这里插入图片描述
  • frame : 栈帧, 一个栈帧代表一个函数(方法)调用
    • 栈帧会逆序调用, #17栈帧调用#16栈帧, 16栈帧调用15栈帧, 依次类推, 直到#0的test函数

3.2 thread return []

  • 让函数直接返回某个值,不会执行断点后面的代码
  • 如果是没有返回值, 直接使用 thread return 就可以了

3.3 frame variable

  • 打印当前栈帧的变量
    在这里插入图片描述

4. 操作控制

  • thread continue、continue、 c :程序继续运行
  • thread step-over、next、 n :单步运行,把子函数当做整体一步执行
  • thread step-in、step、 s :单步运行,遇到子函数会进入子函数
  • thread step-out、finish :直接执行完当前函数的所有代码,返回到上一个函数

5. 指令级别的命令

  • thread step-inst-over、nexti、 ni
  • thread step-inst、stepi、si
  • si、ni和s、 n类似
    • s、n是源码级别的单步执行
      • Source level single step
        在这里插入图片描述
    • si、ni是汇编指令级别的单步执行
      • Instruction level single step
        在这里插入图片描述

6. 代码断点

6.1 breakpoint set

  • 设置断点

  • breakpoint set -a 函数地址

  • breakpoint set -n 函数名

    breakpoint set -n test
    breakpoint set -n touchesBegan:withEvent: // 把所有的这样的方法都打上断点
    breakpoint set -n "-[ViewController touchesBegan:withEvent:]" // 只把ViewController的方法打上断点
    
  • breakpoint set -r 正则表达式

  • breakpoint set -s 动态库 -n 函数名

6.2 breakpoint list

  • 列出所有的断点(每个断点都有自己的编号)

6.3 断点相关操作

  • breakpoint disable断点编号 : 禁用断点
  • breakpoint enable断点编号 : 启用断点
  • breakpoint delete断点编号 : 删除断点

7. 断点命令

7.1 breakpoint command add断点编号

  • 给断点预先设置需要执行的命令,到触发断点时,就会按顺序执行
    在这里插入图片描述
  • 当程序运行到这的时候, 就会打印命令
    在这里插入图片描述

7.2 breakpoint command list断点编号

  • 查看某个断点设置的命令
    在这里插入图片描述

7.3 breakpoint command delete断点编号

  • 删除某个断点设置的命令
    在这里插入图片描述

8. 内存断点

  • 在内存数据发生改变的时候触发在这里插入图片描述
    在这里插入图片描述
  • watchpoint set variable 变量
watchpoint set variable self->_age
  • watchpoint set expression 地址
watchpoint set expression &(self->_age)
  • 运行的时候就会触发内存断点
    在这里插入图片描述
    在这里插入图片描述
  • 打印一下堆栈信息, 就可以看到在哪里修改的
  • 打印堆栈信息: thread backtrace 简写 bt

在这里插入图片描述

  • watchpoint list
  • watchpoint disable 断点编号
  • watchpoint enable 断点编号
  • watchpoint delete 断点编号
  • watchpoint command add 断点编号
  • watchpoint command list 断点编号
  • watchpoint command delete 断点编号

9. 模块查找

9.1 image lookup

image 在底层内存叫模块,不是图片

  • image lookup -t 类型:查找某个类型的信息
    在这里插入图片描述

  • image lookup -a地址:根据内存地址查找在模块中的位置

    • 根据报错信息找到对应的位置
      在这里插入图片描述
  • 根据地址查找,就能找到对应的代码
    在这里插入图片描述

  • image lookup -n符号或者函数名:查找某个符号或者函数的位置

9.2 image list

  • 列出所加载的模块信息
  • image list -o -f
    • 打印出模块的偏移地址、全路径

10 小技巧

  • 敲Enter, 会自动执行上次的命令
  • 绝大部分指令都可以使用缩写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值