iOS逆向学习-lldb断点调试

文章目录lldb断点调试breakpoint对于函数对于方法对于任何这个方法对于文件中这个方法遍历断点查看断点退出lldb模式断点开关断点删除指令查看执行代码expression执行代码创建变量堆栈信息查看btup downframe值固定查看frame variable 查看参数回滚指令 thread return内存断点监听值变化取地址断点命令targettarget stop-hooksto...
摘要由CSDN通过智能技术生成

lldb断点调试

在xcode中进入lldb调试模式,方法区分大小写

breakpoint

breakpoint set -n method
断点某个方法或者函数
-n 表示名称
method表示方法或函数

缩写:b -r method

对于函数

void *test1() {
}

breakpoint set -n test1

缩写 b -n test1

对于方法

- (void)save:(NSString*)name {
//.....
}
- (void)pause:(NSString*)name {
//.....
}
breakpoint set -n "[ViewController save:]" -n "[ViewController pause:]"
缩写:b set -n "[ViewController save:]" -n "[ViewController pause:]"

对于任何这个方法

breakpoint set --selector touchesBegan:withEvent:
这个方法断点了所有的touchesBegan:withEvent:方法,与类无关

对于文件中这个方法

breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
只在当前的ViewController.m的文件中查找这个方法,并断点

遍历断点

breakpoint set -r Game:

遍历工程中所有的带有Game:字段的方法

查看断点

breakpoint list
可以获取所有断点组
1可以包含1.11.2

缩写 break list

退出lldb模式

c continue
意味continue

n next
s step

断点开关

breakpoint enable 1
breakpoint disable 1

1代表断点组,或者单个断点1.1,由breakpoint list获取

缩写 break dis 1
缩写 break en 1

断点删除

breakpoint delete 1

如果不传组,则清空所有的断点
breakpoint delete
只能删除指定的组
如果删除1.1,那和disable命令一样,是禁用

指令查看

help breakpoint
查看所有的breakpoint指令

help b
则可以查看b的作用

全部缩写方法可以自己尝试

执行代码

expression

expression selfp self

缩写 p self
使用 p object会获取一个对象
$0 = 地址
然后我们可以通过p $0.property来打印该对象的属性
相当于使用了一个局部变量$0接收该对象的地址,或者该值。
联想block中的对象拷贝和值拷贝

po 即 expr -o-。它所做的操作与p相同。如果接收到的参数是一个指针,那么它会调用对象的 description 方法并打印。如果接收到的参数是一个 core foundation 对象,那么它会调用 CFShow 方法并打印。如果这两个方法都调用失败,那么 po 打印出和 p 相同的内容。

执行代码创建变量

p Person *p4 = [Person new]; 此时按住Alt+Enter既可以写代码,创建p4

堆栈信息查看

bt

使用bt(意为backtrace,但输入backtrace无效)可查看当前堆栈信息。函数调用栈

up down

通过up down可以在堆栈中向上查看

frame值固定查看

通过frame select 1 指令,选择frame查看
指令中显示的都是汇编代码

frame variable 查看参数

可以查看frame的参数

回滚指令 thread return

通过线程回滚,回滚到上一步,但是不会执行了,因为return了。

内存断点

监听值变化

watchpoint set variable p1.name

watchpoint 指令与breakpoint一样,有dis,en,delelte等命令

p1的name属性变更时,会断点
会给两个值

old value : address1
new value : address2

可以通过po执行来查看地址的值

取地址

p &obj.name 这种写法错误,点语法不对
p &obj->_name  只能访问成员变量来获取地址

断点命令

当断点到某个断点时,如果需要指令多个命令,我们可以提前加好断点命令

breakpoint command add 1

> po self
> p self.view
> DONE

这样,当断点1触发时,会自动执行po和p的两句断点指令。

同样command也可以delete、list来查看调用

target

target stop-hook

target stop-hook add -o "frame variable"

意为每次断点的时候,都会调用该frame的variable指令,不管你断住哪个方法,都会打印参数列表

target stop-hook list
target stop-hook delete
target stop-hook disable
target stop-hook enalbe

同样有list delete等指令。

stop-hook的配置

stop-hook一般不是临时调用的,一般是配置好的。lldb有一个初始化文件

cd ~
ls
ls -a
//查找到.lldbinit文件,即为初始化文件,vim操作该文件即可。
vim .lldbinit
cat .lldbinit
target stop-hook add -o "frame variable"

常用指令image

数组越界

  1. bt查看调用堆栈
    此时我们需要通过地址找到方法位置
  2. image lookup -a address
(lldb) bt
* thread #1, queue = 'com.apple.main-t
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值