Frama-c slice:选择一个条目来获得pragma ctrl

时间:2016-06-29 18:52:25

标签: frama-c

我在获取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?

我希望我已经清楚地说明了我的问题;它让我困惑了几天。

1 个答案:

答案 0 :(得分:1)

首先,请注意Frama-C Fluorine是一个过时的版本。它已在3年多前发布。一些切片相关的错误已经在意外修复。请升级到较新版本,最好是Aluminium

其次,选项-slicing-value的文档是

  

选择左值v1,...,vn的结果                       作为入口点给出的函数的结尾(地址是                       在作为条目给出的函数的开头评估                       点)

不太可能做你想做的事。您是否尝试过选项-slice-calls,更准确地说是-slice-calls memcpy

另外,请注意,B如果计算稍后在memcpy调用中使用的值,则会保留在切片中。