2013-12-19 16 views
1

Iam嘗試使用java在eclipse CDT的幫助下實現C程序的緩衝區溢出問題。 通過給出一個常數值作爲數組下標,其工作正常,如我所料。使用cdt eclipse獲取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

如果標記爲'const int i = 21;',它會起作用嗎? –

+0

不,我得到了與[email protected]a9相同的結果 – Haseena

回答

1

在第二種情況下僅查看下標表達式的AST來檢測錯誤是不夠的,您至少需要一些基本的data flow analysis

但是,根據CDT/designs/StaticAnalysis構建的數據流圖計劃作爲未來的工作,因此您必須自己做或者等到它實施。

作爲第二個例子的特殊情況的簡單解決方案,當下標中有一個局部變量引用時,可以檢查該變量是否不在AST中的任何位置用於初始化和其在下標中的使用。