iOS逆向基础02-编译&调试
2019-03-08 本文已影响0人
李永开
一.iOS的编译器和调试器
-
xcode的编译器发展历史:GCC --> LLVM
-
xcode的调试器发展历史:GDB --> LLDB
ios的BuildSetting选项 -
在ios开发中,经常会使用到Clang,那么Clang是什么呢?
Clang是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言。
Clang的进行步骤:词法分析、语法分析、语义分析、生成中间代码
二.LLDB
express
(lldb) e NSArray *$arr = @[@1,@2]; (lldb) po $arr <__NSArrayI 0x600001299620>( 1, 2 )
- thread backtarce: 查看函数调用信息. (简写:bt)
thread teturn: 返回上一个函数
thread step-in(进入某个函数⬇️);简写:step、s------------->si 汇编级别指令
thread step-out(退出某个函数⬆️);简写:finish
thread step-over(函数级别跳过⤵️);简写:next、n)---------->ni 汇编级别指令
c:继续运行(thread continue的缩写) - breakpoint:
breakpoint set -n test: 给test函数打断点
breakpoint set -r test : 正则表达式匹配方法
breakpoint set -s xx.dylib(动态库名称) -n test : 给xx动态库的test函数打断点
breakpoint list : 查看已经打好的断点
breakpoint command add 1(断点编号):给某个断点添加脚本 - 内存断点:
watchpoint set variable self->age:监控self.age的值
watchpoint set expression 0x78779ae9:监控某块内存的值 - image:
image list: 查看app使用了哪些模块
image lookup -t NSInteger(或self):查看NSInteger(或self)的类型
image lookup -a 0x6777aecc:查看关于这块内存的所有信息
image lookup -n test : 查看所有关于test函数的信息 - frame variable: 打印当前栈帧的变量值
po * (void **) 0x00