如何在 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 类的名称?的主要内容,如果未能解决你的问题,请参考以下文章

Java如何从文件中打印与给定模式匹配的所有字符串?

如何以 0 作为十进制值打印整数?

如何在 Swift IOS 中打印出所有约束常量?

Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类

lua能够用来写二进制数据吗?

Java,打印一个包含所有 16 位的二进制文件