断点
-
List item
设置断点
$breakpoint set -n XXX
set 是子命令
-n 是选项 是–name 的缩写!
-
List item
查看断点列表
$breakpoint list
-
删除断点
$breakpoint delete 组号
-
禁用/启用
$breakpoint disable 禁用 $breakpoint enable 启用
-
遍历整个项目中满足Game:这个字符的所有方法
$breakpoint set -r Game:
$breakpoint set --file 指定文件名 -r Game:
-
简写:
b -f -r Game:
执行代码
expression
$expression 指令,简写p
$po expression命令选项:-O 表示调用对象的discraption方法
函数调用栈
1.函数调用栈
bt
2.函数调用栈的frame上下移动
up
down
3.函数调用栈frame序号移动选择
frame select 序号
流程控制
1.断点继续执行
c
2.单步运行,将子函数当做整体一步执行
n
3.单步运行,遇到子函数会进去
s
4.查看执行到断点的成员变量
frame variable
5.函数点用栈向上一个方法移动,移动后,continue会return,不会继续向下执行
frame return
内存断点
1.内存断点的设置
如下:
1.1 执行取对象成员变量name的地址
p &p1->_name
1.2 根据拿到的地址打内存断点
watchpoint set expression 0x0000060000649d70
2.查看内存断点列表
watchpoint list
断点后添加指令
1.breakpoint command add 断点组号
添加指令 回车
添加指令 回车
添加结束后输入DONE
下次断点执行到该处时候会自动执行输入的指令
例如:
1.1 给hanktest方法下断点
b -[ViewController hankTest1:]
1.2 查看断点列表
(lldb) breakpoint list
Current breakpoints:
2: name = '-[ViewController hankTest1:]', locations = 1, resolved = 1, hit count = 0
2.1: where = LLDB调试`-[ViewController hankTest1:] at ViewController.m:72, address = 0x000000010b5cb340, resolved, hit count = 0
1.3 添加指令
(lldb) breakpoint command add 2
Enter your debugger command(s). Type 'DONE' to end.
> po self
> po self.view
> DONE
1.4 c继续执行后,下次出发点击touchbegin 触发hanktest方法断点
c
Process 94831 resuming
2020-11-09 18:16:23.118222+0800 LLDB调试[94831:3563683] XPC connection interrupted
2020-11-09 18:16:23.118199+0800 LLDB调试[94831:3563564] !!!ddd
po self
<ViewController: 0x7fc40bd0e850>
po self.view
<UIView: 0x7fc40bc00fa0; frame = (0 0; 414 896); autoresize = W+H; layer = <CALayer: 0x600000eb12e0>>
2.查看断点指令
breakpoint command list 2(断点组号)
3.删除断点指令
breakpoint command delete 2(断点组号)
断点hook
1.断点hook添加指令,如
(lldb) target stop-hook add -o "frame variable"
Stop hook #1 added.
(lldb) target stop-hook add -o "self.view"
Stop hook #2 added.
2.查看断点hook列表
(lldb) target stop-hook list
Hook: 1
State: enabled
Commands:
frame variable
Hook: 2
State: enabled
Commands:
self.view
3.继续执行 c
4.触发断点效果:
- Hook 1 (frame variable)
(ViewController *) self = 0x00007fbdefd1d6e0
(SEL) _cmd = "hankTest1:"
(__NSCFConstantString *) str = 0x00000001059610e8 @"ddd"
- Hook 2 (self.view)
error: Aborting reading of commands after command #0: 'self.view' failed with error: 'self' is not a valid command.
5.断点hook删除
(lldb) target stop-hook delete
Delete all stop hooks?: [Y/n] y
或
undisplay 2(组号)
6.脚本中添加断点hook指令
打开终端,用户目录下输入
ls -a
可以看到文件.lldbinit 是lldb初始化加载的文件 ,没有的话新建
vi .lldbinit
输入target stop-hook add -o "frame variable"
保存退出,下次xcode调用LLDB,触发断点后就会执行frame variable命令
物理地址
物理地址 = ASLR + 虚拟地址
1.image list
可以看应用程序调用的模块
2.image lookup -t 类名
可以查看该类的详情,列出来的几乎是头文件
3.例如,eatwithobject 方法中,0x100005f58则ASLR应该是减去0x10000获得0x5f58这个偏移量 ,
偏移量 + imagelist的初始地址,得到物理地址,根据地址设置断点,b -a 地址,或者可以image list 获得地址减去前面的那个序数 + macho eatwithobjec 的地址(这次这边不用减去0x1000了 因为imagelist中获得首地址减去过了)