MASTG-TOOL-0048: dsdump

dsdump 是一个转储 Objective-C 类和 Swift 类型描述符(类、结构体、枚举)的工具。它只支持 Swift 版本 5 或更高版本,并且不支持 ARM 32 位二进制文件。

以下示例展示了如何转储 iOS 应用程序的 Objective-C 类和 Swift 类型描述符。

首先验证应用程序的主二进制文件是否是包含 ARM64 的 FAT 二进制文件

$ otool -hv [APP_MAIN_BINARY_FILE]
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC     ARM         V7  0x00     EXECUTE    39       5016   NOUNDEFS DYLDLINK TWOLEVEL PIE
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
MH_MAGIC_64   ARM64        ALL  0x00     EXECUTE    38       5728   NOUNDEFS DYLDLINK TWOLEVEL PIE

如果是,则指定“--arch”参数为“arm64”,否则如果二进制文件仅包含 ARM64 二进制文件,则不需要指定。

# Dump the Objective-C classes to a temporary file
$ dsdump --objc --color --verbose=5 --arch arm64 --defined [APP_MAIN_BINARY_FILE] > /tmp/OBJC.txt

# Dump the Swift type descriptors to a temporary file if the app is implemented in Swift
$ dsdump --swift --color --verbose=5 --arch arm64 --defined [APP_MAIN_BINARY_FILE] > /tmp/SWIFT.txt

您可以找到有关 dsdump 内部工作原理以及如何以编程方式检查 Mach-O 二进制文件以显示已编译的 Swift 类型和 Objective-C 类的更多信息,请参阅这篇文章