仅为测试目的,我包括一个功能,故意崩溃我的应用程序(测试我的应用程序处理意外崩溃)。为此,我使用:
strcpy(0, "crash");当然,在分析我的代码时,Xcode会报告逻辑错误Null pointer argument in call to string copy function。我尝试过像这样包装违规代码:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
    strcpy(0, "crash");
#pragma clang diagnostic pop但是Xcode (v9.2 (9C40b))仍然在抱怨(我理解这不是警告,是逻辑错误)。还有其他方法可以防止Xcode/clang标记这些代码吗?有什么更好的方法可以避免Xcode/clang分析错误导致崩溃吗?
发布于 2018-01-09 17:37:21
这对我起了作用(不需要用警告抑制)。它通过Xcode/clang的分析,仍然导致了我想要的崩溃:
char *x = (char *)@"0".integerValue; strcpy(x, "crash");发布于 2018-01-09 17:06:34
volatile char* x=0; strcpy(x, "crash")怎么样?
这将起作用,因为编译器不允许假设x在读取时是任何值;这意味着它可能有硬编码的任何检查都应该被忽略。
发布于 2018-01-27 16:31:27
在我看来,克服静态分析的最好方法是做一些动态的事情。Objective本质上有很多选择,因为编译器不能保证消息发送和方法之间的1到1的对应。
最简单的方法可能是触发索引错误:
[@"" characterAtIndex:0]; // or
[@[] objectAtIndex:0];即使分析器知道这些方法的默认实现会为超出范围的访问引发异常,它也不知道您没有在运行时将它们替换为一个处理问题的实现。
https://stackoverflow.com/questions/48173220
复制相似问题