如何在Xcode中从已集成的framework中获取.mm文件
已编译framework提取.mm源文件可行方案
首先明确前提:编译完成的.framework包中不会保留原始的.mm、.m等实现类源文件,这类文件在编译环节已经被转换为二进制机器码存储在framework的主可执行文件内,你无法直接从现有framework中提取出原始的.mm源码,只能通过逆向手段获取尽可能接近原始逻辑的等价代码,可行操作如下:
- 第一步:提取公开头文件
你可以从framework中导出所有公开的头文件,作为逆向梳理逻辑的基础,直接使用class-dump工具即可完成操作,命令格式如下:class-dump -H /path/to/你的Framework.framework/你的Framework执行文件 -o /path/to/导出头文件存储目录
如果你的framework包含Swift混编逻辑,可以配合swift-demangle工具解析符号名,提升头文件可读性。 - 第二步:反编译可执行文件获取实现逻辑
使用Hopper Disassembler、IDA Pro这类逆向工具加载framework内的主可执行文件,这类工具支持将二进制机器码反编译为接近Objective-C/C++语法的伪代码,你可以基于伪代码手动梳理还原出和原.mm实现逻辑一致的代码。
注意如果framework编译时开启了编译优化、符号剥离配置,反编译得到的伪代码可读性会大幅下降,你需要结合现有项目的运行逻辑、公开接口的功能定位做对应梳理。 - 第三步:配合符号表提升逆向效率
如果你当前运行正常的Xcode项目编译后保留了对应的dSYM符号表文件,可以用符号表匹配逆向得到的内存地址,直接识别出函数名、变量名,大幅降低梳理代码的成本。
优先推荐你检查是否有Git代码仓库提交记录、云存储备份、其他设备留存的源文件副本,从备份渠道恢复原始代码是成本最低的方案。
内容的提问来源于stack exchange,提问作者Muhammed Shehryar Sherazi
相关产品推荐
相关产品推荐

