我正在写一个Frama-C插件。
我想开发一个插件,用于设置局部变量的值。通过这个想法,我尝试之后进行价值分析,然后我可以通过我的第二个插件分析可达性,路径分析和其他事情。
是否可以在插件中设置局部变量的值(在我知道名称的函数的开头)?
我现在发现了如何创建新的局部变量,如何获取变量的Varinfo以及如何创建新的varinfos。唯一缺少的是设置变量的值。
我开始使用这样的代码:
match kf_cil_fun with
| Cil_types.Definition(a,b) ->
let val_visitor = new value_set_visitor kf in
Visitor.visitFramacFileSameGlobals (val_visitor :> Visitor.frama_c_visitor) (Ast.get());
let old_varinfo = Cil.makeLocalVar a "x" Cil.intType in
let new_varinfo = Cil.makeVarinfo false false "x" Cil.intType in
val_visitor#doStuff old_varinfo new_varinfo;
()
| _ -> ()
其中访问者是带有方法doStuff的简单访问者,以及只调用Cil.DoChildren
的内置方法vfile,vglob_aux和vstmt_aux
method doStuff old_varinfo new_varinfo =
Cil.set_varinfo self#behavior old_varinfo new_varinfo;
有没有人知道如何将x的值设置为1(或固定的其他值)?我做得对吗?