如何在 iOS 二进制文件中打印所有 Objective-C 类的名称?

Posted

技术标签:

【中文标题】如何在 iOS 二进制文件中打印所有 Objective-C 类的名称?【英文标题】:How to print the names of all Objective-C classes in an iOS binary? 【发布时间】:2019-12-05 10:21:31 【问题描述】:

我想使用 "otool""objcdump" 打印在 ios 二进制文件中找到的所有 Objective-C 类的名称。 我在 macOS 上使用未加密的 iOS 二进制文件执行此操作。

我尝试了什么:

    这里建议的解决方案How to statically dump all ObjC methods called in a Cocoa App?
otool -oV /path to executable/ | grep name | awk 'print $3'

但我不知道如何只解析objective-c 类名。

    使用“nm”的解决方案,但我不太喜欢它:
nm /path to executable/ | grep _OBJC_CLASS_

你们能帮我用一个 cmd/脚本来打印 iOS 二进制文件中所有 Objective-C 类的名称吗?

【问题讨论】:

除了您“不太喜欢它”之外,方法 2 是否存在实际问题? 【参考方案1】:

我猜你不喜欢什么

nm /path to executable/ | grep _OBJC_CLASS_ 

输出:

0000000100003d08 S _OBJC_CLASS_$_AppDelegate
                 U _OBJC_CLASS_$_UIResponder
                 U _OBJC_CLASS_$_UIViewController
0000000100003c90 S _OBJC_CLASS_$_ViewController

是用U标记的父类。

使用otool 我得到了:

otool -tv /path to executable/|grep ]|awk 'print substr($1,3)'|uniq 

比较收益

ViewController
AppDelegate

【讨论】:

以上是关于如何在 iOS 二进制文件中打印所有 Objective-C 类的名称?的主要内容,如果未能解决你的问题,请参考以下文章