引言
iOS常用预处理指令:
- 移除程序中的指定标识符。
- DEBUG宏区分调试模式和发布模式进行特殊处理。
- 导出和隐藏符号。
I 移除程序中的指定identifier(标识符)
#pragma clang poison identifier
应用场景:禁止使用ObjC 的运行时API
- 例子:
II DEBUG 宏的应用
1、原文:kunnan.blog.csdn.net/article/det… 2、应用场景:区分调试模式和发布模式进行特殊处理 3、The DEBUG preprocessor macro setting in an Xcode project
4、发布模式关闭NSLog
III 导出和隐藏符号
3.1 导出符号信息
- 查看导出符号信息:
nm -gm tmp_64.dylib
(__DATA,__data) external
(undefined) external _CFDataCreate (from CoreFoundation) (undefined) external _CFNotificationCenterGetDarwinNotifyCenter (from CoreFoundation) (__TEXT,__text) external (undefined) external _IOObjectRelease (from IOKit) (undefined) external _IORegistryEntryCreateCFProperty (from IOKit) 000000010ffa3f97 (__DATA,__objc_data) external OBJC_CLASS_BslyjNwZmPCJkVst 000000010ffa3f97 (__DATA,__objc_data) external _OBJC_CLASS__ChiDDQmRSQpwQJgm
3.2 控制符号是否导出
- static 参数修饰,不会导出符号信息
- 在编译参数中加入
-exported_symbols_list export_list
- 在Makefile编译参数中指定-fvisibility=hidden,对指定符号增加visibility(“default”)来导出符号
1、在Makefile编译参数中指定
-fvisibility=hidden
2、对指定符号增加visibility(“default”)来导出符号
see also
进一步交流,欢迎搜索小程序:iOS逆向。