我在获取CTRL切片时遇到问题。
我试图通过运行这个来分析OpenSSL:
代码如下所示
frama-c ./ssl/d1_both.c -main dtls1_process_heartbeat -slice-pragma dtls1_process_heartbeat -cpp-command "gcc -C -E -I ./include/ -I ./" -then-on 'Slicing export' -print
`
void dtls1_process_heartbeat(void);
void dtls1_process_heartbeat(void)
{
return;
}
那什么都没有产生,所以我接着尝试了这个:想要得到一个后向切片
function A (){
…
memcpy()
...
}
function B (){
…
…
...
}
function C (){
…
memcpy()
...
}
但我仍然没有得到那样的东西
memcpy()
我怎样才能获得这样的切片?
select title.id, title.name, group_concat(distinct v1.store order by v1.store),
(select group_concat(distinct v3.store order by v3.store)
from version_price v3 where v3.store not in
(select distinct v2.store from version_price v2
where v2.version_id = v.id)
)
from version v inner join title on title_id=title.id
inner join version_price v1 on v1.version_id=v.id
group by title_id
我想捕捉与{{1}}有关的一切,所以我想保留A和C,但不是B。
我应该如何选择入口点?我如何选择pragma?
我希望我已经清楚地说明了我的问题;它让我困惑了几天。
答案 0 :(得分:1)
首先,请注意Frama-C Fluorine是一个过时的版本。它已在3年多前发布。一些切片相关的错误已经在意外修复。请升级到较新版本,最好是Aluminium。
其次,选项-slicing-value
的文档是
选择左值v1,...,vn的结果 作为入口点给出的函数的结尾(地址是 在作为条目给出的函数的开头评估 点)
不太可能做你想做的事。您是否尝试过选项-slice-calls
,更准确地说是-slice-calls memcpy
?
另外,请注意,B
如果计算稍后在memcpy
调用中使用的值,则会保留在切片中。