注册

iOS逆向-18:LLDB调试

在逆向环境中,拿不到源码,只能通过指令设置断点

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]
    x16进制打印
    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
当进行修改的时候就会触发内存断点

f65d5ef0edaef19926a71f8f1164d435.png
然后我们bt一下
f30736cda8cf2fa53a8b24cfe413f7fc.png
可以看到方法的调用栈
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




转自链接:https://www.jianshu.com/p/59123ee28503

0 个评论

要回复文章请先登录注册