我目前正在努力创建一个Frama-C-plugin,它获取层次结构中所有结构的int值(结构中的结构)。
例如: 我有一个包含以下类型的C程序:
struct a{
int a;
int b;
}
struct b{
int c;
int d;
struct a a1;
struct a a2;
}
(甚至更深层次的hierarchie)
在程序中,main方法中只创建了一个b类型的结构。此外,我有几个本地指针和整数(所以只有结构层次结构的解决方案没有帮助)。
现在我想获得"底价值"某些特定位置的b型结构。
我已经开始使用这样的代码:
let lval =
if (Cil.isPointerType vi.vtype) then (
(Mem (Cil.evar vi), NoOffset)
) else if (Cil.isStructOrUnionType vi.vtype)(
(*TODO Section*)
) else (
(Var vi, NoOffset)
)
int *和int' s已经正常工作了,我使用lval-variable来获取值。
为了获得结构的值,我认为我必须递归地进行vi,直到我达到正常"正常"变量或指针,但我该怎么做?
我已经查看了cil_types.mli中的varinfo,但我不知道如何在结构中获取数据。
甚至可以获得这些值的值分析结果,如果是,那么如何?