2016-07-25 31 views
5

如何在纯swift应用程序中启用堆栈粉碎保护?Swift和Stack粉碎保护

我曾尝试在xCode中的项目构建设置选项卡下将“-fstack-protector-all”标志放置到其他C++标志下,但看起来,此标志未使用或对构建的应用程序没有影响。

要验证版本,我正在使用otool -Iv AppBinary | grep stack

+0

你有没有得到这个问题的答案 – nkp

+0

不,我没有。为了满足客户的要求,我将UIView作为Objective-C类加入。这创建伞标题为Objective-C和项目被编译为混合的Swift-Obj-c项目(不是纯粹的swift项目)。 此视图没有使用任何软件......它就是这样。 –

+0

感谢您的输入... – nkp

回答

3

在Swift中,默认启用堆栈压缩,只需要在objective-c应用程序的构建设置下添加“-fstack-protector-all”标志。

如何检查堆栈粉碎是否启用。 运行otool命令并存在stack_chk_guardstack_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