在逆向環(huán)境中架专,拿不到源碼半哟,只能通過(guò)指令設(shè)置斷點(diǎn)
LLDB(Low Lever Debug)
默認(rèn)內(nèi)置于Xcode中的動(dòng)態(tài)調(diào)試工具焙贷。標(biāo)準(zhǔn)的 LLDB 提供了一組廣泛的命令,旨在與老版本的 GDB 命令兼容奠宜。 除了使用標(biāo)準(zhǔn)配置外,還可以很容易地自定義 LLDB 以滿足實(shí)際需要缝其。
這里列舉了一些常用的命令:
斷點(diǎn)設(shè)置
設(shè)置斷點(diǎn)
breakpoint set -n XXX
set 是子命令
-n 是選項(xiàng) 是--name 的縮寫(xiě)!查看斷點(diǎn)列表
breakpoint list
刪除
breakpoint delete 組號(hào)
禁用/啟用
breakpoint disable
禁用
breakpoint enable
啟用遍歷整個(gè)項(xiàng)目中滿足Game:這個(gè)字符的所有方法
breakpoint set -r Game:
流程控制
繼續(xù)執(zhí)行
continue c
單步運(yùn)行,將子函數(shù)當(dāng)做整體一步執(zhí)行
n next
單步運(yùn)行,遇到子函數(shù)會(huì)進(jìn)去
s
stop-hook
讓你在每次stop的時(shí)候去執(zhí)行一些命令,只對(duì)breadpoint,watchpoint其他命令
image list
p
expression 除了打印還可以執(zhí)行一些代碼
b -[xxx xxx]
x
16進(jìn)制打印
register read
讀寄存器
po
b -r xx
斷住所有包含的方法
b -selector xx
斷住所有xx方法
help xx
查看指令
函數(shù)調(diào)用棧
bt //所有調(diào)用棧
up //跳上層堆棧
down
frame select 12 跳指定下標(biāo)堆棧
frame variable 當(dāng)前函數(shù)參數(shù)挎塌,只能修改當(dāng)前函數(shù)參數(shù)
thread return 代碼回滾,直接返回内边,不執(zhí)行后面的代碼榴都。提前返回,可以通過(guò)這種方式繞過(guò)hook
內(nèi)存斷點(diǎn)
Person *person = [Person new];
person.name = "FY"漠其;
下內(nèi)存斷點(diǎn):
watchpoint set variable person->_name
watchpoint set expression 0x456
&person->_name
當(dāng)進(jìn)行修改的時(shí)候就會(huì)觸發(fā)內(nèi)存斷點(diǎn)
然后我們bt一下
可以看到方法的調(diào)用棧
break command add 1
在斷點(diǎn)中添加一些指令
讓你在每次stop的時(shí)候去執(zhí)行一些命令,只對(duì)breadpoint,watchpoint
target stop-hook add -o "frame variable"
target stop-hook add -o "po self.view"
target stop-hook list
這些指令也可以放到家目錄下的.lldbinit中嘴高,只要lldb一啟動(dòng)就會(huì)執(zhí)行里面的命令,一般的lldb插件就是在這個(gè)目錄配置的
cd ~
進(jìn)入家目錄
.lldbinit