当前位置:Gxlcms > 数据库问题 > LLDB调试详解--逆向开发

LLDB调试详解--逆向开发

时间:2021-07-01 10:21:17 帮助过:53人阅读

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.test1(str: "zxy") }

通过breakpoint set -n 某函数名,来给某函数设置断点

通过breakpoint list 打印出断点列表

技术图片

 如果想一次性来设置多个断点,也可以使用命令

 breakpoint set -n 某函数名, -n 某函数名, -n 某函数名……

但是这样设置就会将这几个断点设置为一组,与上面不一样,一个个设置的.

breakpoint delete来删除所有上次设置的断点

技术图片

breakpoint disable 断点Id: 将设置过的断点禁用,再次打印出breakpoint list 发现断点式disable的

技术图片

breakpoint set -r “字符串” 会遍历整个工程,只要含该字符串的方法、函数都会下断点

技术图片

 

breakpoint set -f 类名 -l 断点行数 会给该类名的具体行数加断点 技术图片

breakpoint set -file 类名 --selector 方法名 会给该类名的具体方法加断点

技术图片

 breakpoint command add 标号 :断点之后执行相应命令,以Done结束,类似于Edit breakpoint

技术图片

总结如下:
技术图片

3.2 流程控制

在Xcode调试Debugger时,经常有看到界面

技术图片

 

对应的解释和意义如下图:

技术图片

 对应的命令如下

技术图片

技术图片

 3.3 打印命令

p语句动态执行语句,可以查看基本数据的类型值, 如果用p命令查看的是对象的话, 只会返回对象的指针地址, p后面可以接变量、常量还可以接表达式

po语句: 打印对象的desc信息, 打印对象. 

p和po的区别在于po会输出对应的值, p会返回返回值的类型及命令结果的引用名

expression语句: 和p语句意思是一样的

技术图片

 上面有&0,&1这样的符号,是指对象的一个引用. 在控制台上可以用这个符号来操作对应的对象.

示例2

-(NSMutableArray<Person *> *)models{
    if (!_models) {
        //arrayWithCapacity 节约内存。容量就是真实的内存中占用的大小。
        _models = [NSMutableArray array];
    }
    return _models;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    Person * p1 = [[Person alloc] init];
    p1.name = @"one";
    p1.age = 1;
    Person * p2 = [[Person alloc] init];
    p2.name = @"two";
    p2.age = 2;
    Person * p3 = [[Person alloc] init];
    p3.name = @"three";
    p3.age = 3;
    
    [self.models addObject:p1];
    [self.models addObject:p2];
    [self.models addObject:p3];
}

技术图片

 3.4 frame、bt、 up、 down

frame select 断点排序值 

frame variable :查看参数

bt:查看堆栈

 再看示例1,点击test1,test2,test3 。对test1设置断点

技术图片

可以通过up和down命令来查看步骤

up:向上查看

down:向下查看

技术图片

 3.5 thread、target

thread info: 输出当前的线程

thread return :不再执行下面的代码

技术图片

 

target stop-hook add -o  "frame  variable": 断点进入之后做的操作,这里是打印参数

技术图片

3.6 image指令 

技术图片

 image lookup -address 查找崩溃信息

技术图片

 

 image lookup -name 查看方法的来源

技术图片

 

 image lookup -type 查看成员,可以查看某个类class的所有成员变量以及属性

技术图片

 总结图如下:
技术图片

 

 总结

 LLDB功能是非常强大的, 上面仅仅是介绍了一些简单常用的命令, 还可以做进一步的探索. 下一篇我们将继续讲述LLDB的高级用法的操作, 使用LLDB操作指令可是开发装逼的一种神器, 快使用起来吧. 希望本篇博客对大家理解使用LLDB有所帮助,如果觉得还不错,给个点赞撒!!!

 

LLDB调试详解--逆向开发

标签:记录   frame   lis   ret   pac   ini   删除   设置断点   ima   

人气教程排行