我是 CIL 的新手,我正在尝试修改 CIL 的扩展。
这是我正在处理的 C 代码的一部分:
int main()
{
int a = 1;
int b = 2;
int *p = &a;
*p = 2;
b = *p;
}
我正在使用 CIL 打印出 lval 的类型(我也尝试打印出正确表达式的类型)
这是代码:
method vinst(i) =
match i with
| Set (lv, e, _) ->
let tt = typeOf e in
let ds_type () i = Pretty.sprint max_int (d_type () tt) in
let i_str = Printf.sprintf "%a" ds_type i in
(E.log "%s\n" i_str); SkipChildren
| _ -> DoChildren
令我惊讶的是,它产生的结果是:
int
int
int *
int
int
int
我试图打印出正确表达式的类型,结果也是:
int
int
int *
int
int
int
我不明白为什么找不到指针类型的用法?
谁能给我一些帮助?