我想在第三方类实例方法上设置断点。
br set -r "\[ThirdPartyClass .*\]$"
但是我得到了(没有位置)。
然后我想查找这个类并找出其中的问题。
image lookup -t ThirdPartyClass
输出为空,情况变得奇怪起来。
最终,我使用hopper查找实例方法的地址偏移量,大概是这样的。
-[ThirdPartyClass aMethod:]:
00000001008f83b8 stp x22, x21, [sp, #-0x30]! ; Objective C Implementation defined at 0x101098168 (instance method), DATA XREF=0x101098168
00000001008f83bc stp x20, x19, [sp, #0x10]
00000001008f83c0 stp x29, x30, [sp, #0x20]
00000001008f83c4 add x29, sp, #0x20
00000001008f83c8 mov x19, x2
00000001008f83cc mov x20, x0
00000001008f83d0 adrp x8, #0x101102000
00000001008f83d4 ldr x1, [x8, #0xb40]
00000001008f83d8 mov x0, x19
00000001008f83dc bl imp___stubs__objc_msgSend
00000001008f83e0 adrp x8, #0x101116000
00000001008f83e4 ldrsw x21, [x8, #0x8d4]
00000001008f83e8 ldr x0, x20, x21
00000001008f83ec adrp x8, #0x101102000
00000001008f83f0 ldr x1, [x8, #0x940]
00000001008f83f4 bl imp___stubs__objc_msgSend
00000001008f83f8 str x19, x20, x21
00000001008f83fc ldp x29, x30, [sp, #0x20]
00000001008f8400 ldp x20, x19, [sp, #0x10]
00000001008f8404 ldp x22, x21, [sp]!, #0x30
00000001008f8408 ret
使用以下方法查找基地址。
image list -f -o
[ 0] /Users/TEP/Library/Developer/Xcode/DerivedData/XXXXXX 0x00000000009e8000
当我混淆了所有这些地址时。
image lookup -a 0x00000000009e8000+0x0000001008f83b8
我收到了这个信息:
Address: XXXXXXX[0x00000001008f83b8] (XXXXXXXX.__TEXT.__text + 9376552)
Summary: XXXXXXXXXX`___lldb_unnamed_symbol98$$XXXXXXXXXX
那么,什么是___lldb_unnamed_symbol?这个类在哪里,为什么我找不到它?
ThirdPartyClass
类的任何类别方法,因为签名看起来像这样:-[ThirdPartyClass(SomeCategoryName) aMethodWithParam:] - Sozin's Comet