在Swift中,默认情况下启用堆栈粉碎,只需要在objective-c应用程序的构建设置下添加"-fstack-protector-all"标志.
如何检查是否启用了堆栈粉碎.
运行的otool命令和存在stack_chk_guard
和stack_chk_fail
装置的代码被堆栈溢出保护.
$ otool -Iv <appname>|grep stack
0x0013dfg 520 ___stack_chk_fail
0x001d009 521 ___stack_chk_guard
0x001fd345 520 ___stack_chk_fail
0x000000010087efd 513 ___stack_chk_fail
0x0000000100098hf3 514 ___stack_chk_guard
0x00000001000897gfr 513 ___stack_chk_fail
Run Code Online (Sandbox Code Playgroud)
我在 100% Swift 项目中也遇到过这个问题。
\n\n每当我添加-fstack-protector-all
到“其他 C 标志”构建设置时,这些标志都不会显示在二进制文件中,如其他评论中所述。
我所做的是创建一个 Objective-C Class\xe2\x80\xa6
\n\n// DummyClassForSSP.h\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface DummyClassForSSP : NSObject\n+ (void)dummyCallSoFlagsShowUpInIPA;\n@end\n\nNS_ASSUME_NONNULL_END\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 添加了一个虚拟实现 \xe2\x80\xa6
\n\n// DummyClassForSSP.m\n#import "DummyClassForSSP.h"\n\n@implementation DummyClassForSSP\n\n+ (void)dummyCallSoFlagsShowUpInIPA {}\n\n@end\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 并从我的 AppDelegate 调用它。
\n\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n....\nDummyClassForSSP.dummyCallSoFlagsShowUpInIPA()\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n之后,标志如所描述的那样出现。
\n 归档时间: |
|
查看次数: |
3443 次 |
最近记录: |