在逆向环境中,拿不到源码,只能通过指令设置断点
LLDB(Low Lever Debug)
默认内置于Xcode中的动态调试工具。标准的 LLDB 提供了一组广泛的命令,旨在与老版本的 GDB 命令兼容。 除了使用标准配置外,还可以很容易地自定义 LLDB 以满足实际需要。
这里列举了一些常用的命令:
断点设置
-
设置断点
breakpoint set -n XXX
set 是子命令
-n 是选项 是--name 的缩写! -
查看断点列表
breakpoint list
-
删除
breakpoint delete 组号
-
禁用/启用
breakpoint disable
禁用
breakpoint enable
启用 -
遍历整个项目中满足Game:这个字符的所有方法
breakpoint set -r Game:
流程控制
-
继续执行
continue c
-
单步运行,将子函数当做整体一步执行
n next
单步运行,遇到子函数会进去
s
-
stop-hook
让你在每次stop的时候去执行一些命令,只对breadpoint,watchpoint -
其他命令
image list
p
expression 除了打印还可以执行一些代码
b -[xxx xxx]
x
16进制打印
register read
读寄存器
po
b -r xx
断住所有包含的方法
b -selector xx
断住所有xx方法
help xx
查看指令
函数调用栈
bt //所有调用栈
up //跳上层堆栈
down
frame select 12 跳指定下标堆栈
frame variable 当前函数参数,只能修改当前函数参数
thread return 代码回滚,直接返回,不执行后面的代码。提前返回,可以通过这种方式绕过hook
内存断点
Person *person = [Person new];
person.name = "FY";
下内存断点:
watchpoint set variable person->_name
watchpoint set expression 0x456
&person->_name
当进行修改的时候就会触发内存断点

然后我们bt一下

可以看到方法的调用栈
break command add 1
在断点中添加一些指令
让你在每次stop的时候去执行一些命令,只对breadpoint,watchpoint
target stop-hook add -o "frame variable"
target stop-hook add -o "po self.view"
target stop-hook list
这些指令也可以放到家目录下的.lldbinit中,只要lldb一启动就会执行里面的命令,一般的lldb插件就是在这个目录配置的
cd ~
进入家目录
.lldbinit
网友评论