使用cdt eclipse获取C程序的数组下标

时间:2013-12-19 05:18:09

标签: java c arrays windows eclipse-cdt

我试图在eclipse CDT的帮助下使用java实现C程序的缓冲区溢出问题。 通过给出一个常量值作为数组下标,它的工作正常,如我所料。

参见示例代码:

   CASTArraySubscriptExpression exprsn =     (CASTArraySubscriptExpression)astName.getParent().getParent();

    String size = exprsn.getSubscriptExpression().toString();
    System.out.println("Size : " + size);

使用此代码,能够检测以下代码的数组下标值:

int a[10];
a[12] = 4;//Here it detect the buffer overrun problem.

但如果我这样说:

int a[10];
int i = 21;
a[i] = 4;

此处,无法检测索引i的值。 如何使用CDT检测值?

1 个答案:

答案 0 :(得分:1)

在第二种情况下,仅仅查看下标表达式的AST以检测错误是不够的,您至少需要一些基本的data flow analysis

但是,根据CDT/designs/StaticAnalysis构建数据流图表是计划作为未来的工作,所以您必须自己做或者等到它实现。

作为第二个示例的特殊情况的简单解决方案,当您在下标中有一个局部变量引用时,您可以检查该变量是否在初始化及其在下标中的使用之间的AST中没有使用。 / p>