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
...