我想分析我的程序,假设malloc成功返回一个已分配的缓冲区。
当我使用命令
运行值插件时/Users/philippeantoine/.opam/4.02.3/bin/frama-c -val testalloc.c
这个简单的程序:
#include <stdlib.h>
int main (){
char * test = malloc(10);
test[0] = 'a';
}
我得到以下输出:
[value] computing for function malloc <- main.
Called from testalloc.c:4.
[value] using specification for function malloc
[value] Done for function malloc
testalloc.c:5:[kernel] warning: out of bounds write. assert \valid(test+0);
[value] Recording results for main
[value] done for function main
我不想让#34;越界写出&#34; 我怎么能这样做?
PS:我试图在stdlib.h中更改malloc规范,但没有成功
答案 0 :(得分:2)
不幸的是,在当前开源版本的Frama-C(在Value插件中)中没有令人满意的malloc
实现。 stdlib.c
中以前可用的版本都有缺点。由于这个原因,他们已被部分删除。
我们已经实现了一个新的,合理的(正确的)和足够可理解的模型化。但是,它只适用于2016年10月或11月发布的Frama-C Silicium。