• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 什么是___lldb_unnamed_symbol?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:53:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想在第三方类实例方法上设置断点。

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 是什么?这门课在哪里,为什么我找不到?



Best Answer-推荐答案


在应用程序的主要可执行文件中,Objective-C 代码被剥离,因此 LLDB 无法读取这些符号。这与动态链接框架不同,您仍然可以解析符号。

话虽如此,您正在使用 Objective-C,因此您可以使用 Objective-C 运行时来对抗自身。当加载到内存中时,有多种方法可以找到该方法的位置。但是由于我看到您在该断点中使用了正则表达式选项,因此我建议您查看这个自定义 LLDB 脚本,该脚本可以搜索主可执行文件以查找已剥离的类

https://github.com/DerekSelander/LLDB/blob/master/lldb_commands/lookup.py

这个名为lookup的命令可以这样使用:

(lldb) 查找 -X\[ThirdPartyClass\s

使用 -l 参数可以获得这些方法的加载地址 (lldb) 查找 -X -l\[ThirdPartyClass\s

当然,您可以使用 -B 选项在所有这些方法上设置断点 (lldb) 查找 -X -B\[ThirdPartyClass\s

您可以在此视频中看到此查找命令 https://youtu.be/gxfrJuxwblI?t=20m50s

关于ios - 什么是___lldb_unnamed_symbol?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47922665/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap