首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止Xcode/clang在故意有缺陷的代码上引发逻辑错误

防止Xcode/clang在故意有缺陷的代码上引发逻辑错误
EN

Stack Overflow用户
提问于 2018-01-09 17:02:09
回答 3查看 182关注 0票数 4

仅为测试目的,我包括一个功能,故意崩溃我的应用程序(测试我的应用程序处理意外崩溃)。为此,我使用:

代码语言:javascript
运行
复制
strcpy(0, "crash");

当然,在分析我的代码时,Xcode会报告逻辑错误Null pointer argument in call to string copy function。我尝试过像这样包装违规代码:

代码语言:javascript
运行
复制
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
    strcpy(0, "crash");
#pragma clang diagnostic pop

但是Xcode (v9.2 (9C40b))仍然在抱怨(我理解这不是警告,是逻辑错误)。还有其他方法可以防止Xcode/clang标记这些代码吗?有什么更好的方法可以避免Xcode/clang分析错误导致崩溃吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-09 17:37:21

这对我起了作用(不需要用警告抑制)。它通过Xcode/clang的分析,仍然导致了我想要的崩溃:

代码语言:javascript
运行
复制
char *x = (char *)@"0".integerValue; strcpy(x, "crash");
票数 2
EN

Stack Overflow用户

发布于 2018-01-09 17:06:34

volatile char* x=0; strcpy(x, "crash")怎么样?

这将起作用,因为编译器不允许假设x在读取时是任何值;这意味着它可能有硬编码的任何检查都应该被忽略。

票数 0
EN

Stack Overflow用户

发布于 2018-01-27 16:31:27

在我看来,克服静态分析的最好方法是做一些动态的事情。Objective本质上有很多选择,因为编译器不能保证消息发送和方法之间的1到1的对应。

最简单的方法可能是触发索引错误:

代码语言:javascript
运行
复制
[@"" characterAtIndex:0]; // or
[@[] objectAtIndex:0];

即使分析器知道这些方法的默认实现会为超出范围的访问引发异常,它也不知道您没有在运行时将它们替换为一个处理问题的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48173220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档