LLDB(Low Lever Debug)
LLDB
默认内置于Xcode中的动态调试工具。标准的LLDB提供了一组广泛的命令,旨在与老版本的GDB命令兼容,除了使用标准配置外,还可以很容易地自定义LLDb以满足实际需要
LLDB语法
<command> [<subcommand>[<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
- <command>(命令)和<subcommand>(子命令):LLDB调试命令的名称
- <action>:执行命令的操作
- <options>:命令选项
- <arguement>:命令的参数
- [] : 标识命令是可选的,可以有也可以没有
breakpoing set -n test
- command:breakpoint 表示断点命令
- action:set 表示设置断点
- option:-n 表示根据方法name设置断点
- arguement:test 表示方法名为test
断点设置
设置断点
$breakpoint set -n XXX
- set 是子命令
- n 是选项 --name的缩写
查看断点列表
$breakpoint delete 组号
禁用/启用
$breakpoint disable 禁用
$breakpoint enable 启用
便利整个项目中满足Game:这个字符的所有方法
$breakpoint set -r Game;
流程控制
继续执行
$continue c
单步运行,将子函数当做整体一步执行
$n next
单步运行,遇到子函数会进去
$s
其他命令
执行代码expression
- $expression指令,简写p
- $po expression命令选项:-O 表示调用对象的discraption 方法
stop-hook
- 让你在每次stop的时候去执行一些命令,支队breakpoint,watchpoint
frame(帧)
- $frame variable 可以打印出当前frame的所有变量
breakpoint command
- $breakpoint command add 命令就是给断点添加命令的命令,他会让你输入增加哪些命令,输入'DONE'表示结束
其他命令
- image list 查看某块列表
- register read 读取寄存器
- register write 写入寄存器
- Memory read 读取内存值
LLDB的官方API文档:https://lldb.llvm.org/python_reference/index.html
ASLR
ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆 ,栈,共享库映射等线性布局的随机化,通过增加攻击者预测目的的地址的难度,防止攻击者直接定位共计代码位置,达到阻止溢出攻击的目的。
大部分主流的操作系统已经实现了ASLR
Linux
Linux 已经在内核2.6.12中添加了ALSR
Windows
Windows Server 2008,Windows 7,Windows Vista,Windows 2008R2,默认情况下启用ASLR,但它仅适用于动态链接库和可执行完恩建
Mac OSX
Apple 在Mac OSX Leopard10.5(2007年十月发行)中某些库导入了随机地址偏移,但其实并没有提供ASLR所定义的完整保护能力,而Mac OS Lion10.7则对所有的应用程序均提供了ASLR支持。Apple宣称为应用程序改善了这项技术的支持,能让32及64位的应用程序避开更多此类攻击,从OS X Moutain Lion10.8 开始,核心及核心扩充与zones在系统启动时会随机配置。
iOS(iPhone ,iPod touch ,iPad)
Apple 在iOS4.3 内倒入了ASLR。
Android
Android 4.0 提供地址空间随机加载ASLR,以帮助保护系统和第三方应用由于内存管理问题的攻击,在Android4.1中假如地址无关代码(position-independent code) 的支持