美文网首页
LLDB常用命令

LLDB常用命令

作者: 正_文 | 来源:发表于2020-09-17 14:08 被阅读0次

LLDB全称Low Level Debugger,是内置于Xcode中的动态调试工具,是我们开发中必不可少的工具。
查看指令,进入LLDB模式,输入help命令回车;查看指令帮助:

image.png

一、设置断点

breakpoint set -n test1:为test1方法添加断点,-n等同于--name
breakpoint set -n test1 -n “-[ViewController save]”
breakpoint list:为多个方法添加断点

breakpoint disable 1 :第一组断点失效
breakpoint disable 1.1 : 第一组第一个失效
breakpoint enable 1:第一组断点可用

breakpoint delete 1.1
breakpoint set —selector touchesBegan:withEvent:
breakpoint set --file ViewController.m --selector touchesBegan:withEvent:
breakpoint set -r Game:: 满足包含Game:这个字符的方法都添加断点

c :继续,continue的缩写。
s:单步走, step的简写,遇到嵌套子函数会进去。
n:单步运,next的简写,遇到嵌套子函数会当做整体一步执行。

b eatWithObject: :为eatWithObject:方法添加断点
b -a 0x000006329093: 为地址为0x000006329093的方法添加断点

二、执行代码

expression self:注意p == expressionpo == expression -o
查看帮助指令:

image.png

我们也可以通过p指令,修改函数参数值,如:p str = @"2222"

三、函数调用栈

btthread backtrace的简写,函数调用栈
up & down:跳转到前一个、后一个方法
frame select 1:通过调用栈编号,跳转到对应方法

frame variable :查看当前方法的局部变量,即方法参数
thread return :线程代码回滚,而且可以修改参数,但会在上一个方法return,不在继续执行

四、 image命令

image list ,查看当前进程加载了哪些库:

image.png

0x0000000109caa000:这个地址是mach-o的真实内存首地址,即ASLR
逆向开发时,某个方法或者变量的真实地址获取方法:真实地址 = mach-o地址 + ASLR。注意,这里需要减去一个pageZero0x100000000,64 位下是 4个G),因为所有地址都会加上pageZero。
image list -o -f: 查看所有进程、库
image lookup -t Person,查看类对象的内存详情:

image.png

五、内存断点

watchpoint set variable p1->_name
watchpoint set expression 0x000006329093

image.png

breakpoint command add 1 :为第一组断点添加命令
breakpoint command delete 1
breakpoint command list

image.png

六、全局断点

target stop-hook add -o "frame variable" :为所有断点添加命令,打印方法所有变量
target stop-hook list
target stop-hook delete :删除所有全局断点
undisplay 2 :全局断点第二个不可用

image.png

六、逆向 断点

6.1 首先将mach-o文件在hopper中打开
image.png

找到eatWithObject:在mach-o中的内存地址100001cd0

6.2 aslr地址

mach-o内存的首地址:0x000000010735d000,参考上面的image list指令

image.png
6.3 方法物理地址 = ASLR + 虚拟地址

0x000000010735d000 + 0x1cd0 = 0x10735ECD0

image.png

七、自动启动LLDB命令

终端根目录,ls -a,找到.lldbinit文件。

image.png

如果没有,就自己vim创建一个,然后添加代码

target stop-hook add -o "frame variable"

当然你也可以添加其他命令。然后打开一个项目,添加一个断点,运行,即会打印该方法的参数变量。
注意:.lldbinit文件,全局有效,在Xcode启动时自动执行,会影响所有的项目。

这个文件影响的是LLDB应用,不是Xcode,终端输入lldb指令,可以直接进入lldb模式,通过process 进程id,也可以直接调试应用。

相关文章

  • lldb调试

    1. 常用命令 (lldb) thread step-over // The same as "next" or ...

  • 常用调试命令

    LLDB常用命令 LLDB是LLVM下的调试器 p 输出基本类型 po 输出objc对象 expr 断点调试时,在...

  • iOS 开发中 LLDB 常用命令整理

    iOS 开发中 LLDB 常用命令整理 expression(或者缩写expr) 表达式 expression ...

  • 六、iOS逆向之《LLDB高级用法&Cycript》

    前言 上节文章讲解了一些lldb的常用命令,这篇文章我们来讲解一些lldb的高级用法。 一、ASLR ASLR概述...

  • # LLDB调试一些常用命令和技巧

    LLDB调试一些常用命令和技巧 1.常用命令 help是帮助命令,会打印出一个command list,help ...

  • lldb

    lldb 调试实战 0x0 命令结构 其中options和argument是可选的. 0x1 常用命令 1,设置断...

  • LLDB调试-Chisel使用

    LLDB 调试器集成于 Xcode 内部并支持 C++ ,Python插件,这里解释了其工作原理。常用命令包括pr...

  • iOS逆向:动态调试

    目录一,Xcode动态调试的原理二,终端动态调试的原理三,建立连接四,LLDB常用命令五,ASLR 一,Xcode...

  • lldb常用命令

    LLDB命令的语法有其通用结构,通常是以下形式的: [ [ ...]] [-options [option...

  • LLDB常用命令

    po打印具体对象,调用变量的API,基本数据类型需要先强制类型转换,宏不能直接打印 call / p / prin...

网友评论

      本文标题:LLDB常用命令

      本文链接:https://www.haomeiwen.com/subject/hxshsktx.html