我工作的一个邮资-C插件,应该可以解决各种可变因素的值。我设法取消引用指针和结构和typedefs并打印相应的值。邮资-C插件:解决阵列值
现在我有得到一个数组的值挣扎。
这里是我的方法,到目前为止,以下的描述:
| TArray (typ, exp, bitsSizeofTypCache, attributes) -> (
let len = Cil.lenOfArray exp in
let rec loc_rec act max =
if act < max then(
let packed = match exp with
| Some x -> x
in
let inc = Cil.increm packed act in
let new_offset = (Index(inc, offset)) in
rec_struct_solver typ (vi_name^"["^(string_of_int act)^"]") (lhost, new_offset);
loc_rec (act+1) max
);
in
loc_rec 0 len
)
我管理通过匹配类型时使用Cil.lenOfArray
用表达选项,以获得阵列的长度。现在
我的方法是去在阵列的长度,递增描述表达和修改的偏移,然后处理这样的局部变量的变量(在下一递归步骤)。
我觉得这个想法基本上是有道理的,但我不知道,如果增量做正确(值确定,或由某些尺寸或乘的东西),或其他事情不工作。
该程序编译(警告匹配不包括所有情况,这是无关紧要的,因为我只能使用表达式,而不是NONE
),但不输出(正确的)结果。
这是近正确的做法,还是我这样做完全错了吗?有人可以给我一些关于如何获得数组值的提示吗?
如果有任何不明白(因为它是很难描述我想要什么),请让我知道,我会修改我的问题。
编辑
这样
int arr[3];
arr[0]=0;
arr[1]=1;
arr[2]=2;
arr[0]=3;
守则的预期结果应该是类似的东西:
arr[0]=0;3
arr[1]=1
arr[2]=2
我只是希望每一个索引来获取所有的值在程序上的数组。 虽然我只得到空的结果,如arr[1]={ }
(也用于其他Indizes),所以我根本没有得到我使用的这种访问类型的结果。
您能否至少解释什么是“正确的结果”以及脚本的输出与他们的不同? – Virgile
我编辑了我的问题! –