我试图在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检测值?
答案 0 :(得分:1)
在第二种情况下,仅仅查看下标表达式的AST以检测错误是不够的,您至少需要一些基本的data flow analysis。
但是,根据CDT/designs/StaticAnalysis构建数据流图表是计划作为未来的工作,所以您必须自己做或者等到它实现。
作为第二个示例的特殊情况的简单解决方案,当您在下标中有一个局部变量引用时,您可以检查该变量是否在初始化及其在下标中的使用之间的AST中没有使用。 / p>