我是 CBMC 的新手并正在尝试它。在此链接中,有一个玩具示例,用于使用 CBMC 检查函数 binsearch。我决定运行他们提供的以下命令,只是改变了循环展开的次数:
cbmc binsearch.c --function binsearch --unwind 4 --bounds-check --unwinding-assertions
它返回以下内容:
** Results:
[binsearch.unwind.0] unwinding assertion loop 0: FAILURE
prog.c function binsearch
[binsearch.array_bounds.1] line 7 array `a' lower bound in a[(signed long int)middle]: SUCCESS
[binsearch.array_bounds.2] line 7 array `a' upper bound in a[(signed long int)middle]: SUCCESS
[binsearch.array_bounds.3] line 9 array `a' lower bound in a[(signed long int)middle]: SUCCESS
[binsearch.array_bounds.4] line 9 array `a' upper bound in a[(signed long int)middle]: SUCCESS
展开断言失败是因为没有足够的迭代是一件坏事吗?从我的角度来看,这个例子似乎没有错误,因为代码没有访问它不应该访问的内存部分,但我不确定是否基于那个展开断言失败。有人对安全性有任何想法吗?那次失败重要吗?