跳过内容

MASTG-TECH-0113: 获取调试符号

要从 iOS 二进制文件中检索调试符号,可以使用 iOS 版 radare2 objdump - iOS nm - iOS检查所有应用程序二进制文件。

radare2

使用 iOS 版 radare2 命令 is

r2 -A MASTestApp
[0x100007408]> is~Sec
70  0x00007894 0x100007894 LOCAL  FUNC 0        imp.SecKeyCopyExternalRepresentation
71  0x000078a0 0x1000078a0 LOCAL  FUNC 0        imp.SecKeyCopyPublicKey
72  0x000078ac 0x1000078ac LOCAL  FUNC 0        imp.SecKeyCreateRandomKey
73  0x000078b8 0x1000078b8 LOCAL  FUNC 0        imp.SecKeyCreateSignature
74  0x000078c4 0x1000078c4 LOCAL  FUNC 0        imp.SecKeyVerifySignature

或者,您可以使用 rabin2通过运行 rabin2 -s MASTestApp获取符号

objdump

以下代码段展示了如何将 objdump - iOS应用于 MASTestApp(iOS 主应用程序可执行文件),并显示包含调试符号的二进制文件的典型输出。这些调试符号用 d (debug) 标志标记。请查阅 objdump 手册页面以获取有关各种其他符号标志字符的信息。

$ objdump --syms MASTestApp | grep " d " | grep "swift"
...
0000000000000000      d  *UND* MastgTest.swift
0000000000000000      d  *UND* __swift_FORCE_LOAD_$_swiftFoundation_$_MASTestApp
0000000000000000      d  *UND* __swift_FORCE_LOAD_$_swiftObjectiveC_$_MASTestApp
0000000000000000      d  *UND* __swift_FORCE_LOAD_$_swiftDarwin_$_MASTestApp
0000000000000000      d  *UND* __swift_FORCE_LOAD_$_swiftCoreFoundation_$_MASTestApp
...

nm

使用 nm - iOS可以将对 nm 的纯调用中的符号与对 nm -a 的调用的输出进行比较。后者还会打印调试符号。以下命令将仅以差异格式显示调试符号。如果此输出为空,则表示没有调试符号。

$ diff <(nm MASTestApp) <(nm -a MASTestApp)
...
28a228
> 0000000100009928 - 01 0000   FUN _$s10MASTestApp11ContentViewV7SwiftUI0D0AadEP05_makeD4List4view6inputsAD01_dH7OutputsVAD11_GraphValueVyxG_AD01_dH6InputsVtFZTW
30a231
> 000000010000992c - 01 0000   FUN _$s10MASTestApp11ContentViewV7SwiftUI0D0AadEP14_viewListCount6inputsSiSgAD01_dhI6InputsV_tFZTW
31a233,234
> 0000000100009944 - 01 0000   FUN _$s10MASTestApp11ContentViewV7SwiftUI0D0AadEP4body4BodyQzvgTW
> 0000000000000000 - 00 0000  GSYM _$s10MASTestApp11ContentViewVAC7SwiftUI0D0AAWL
32a236
> 000000010000a220 - 01 0000   FUN _$s10MASTestApp11ContentViewVAC7SwiftUI0D0AAWl
...