2011-05-17 37 views
0

我正在嘗試創建一個靜態規則來檢查傳遞給SIL4應用程序中防禦性編程的令牌。Parasoft rulewizard

規則如下:「每個函數應有一個const uint_32作爲最後一個參數」

即:

uint_32 foo(uint_32 a, uint_32 b, const uint_32 c) ok 
uint_32 foo(uint_32 a, uint_32 b, const uint_16 c) NOK 
uint_32 foo(uint_32 a, uint_32 b, uint_32 c) NOK 
uint_32 foo(uint_32 a, const uint_32 b, uint_32 c) NOK 

有一個人可以幫助我嗎?我在黑暗中摸索

+0

如果您沒有找到與Parasoft配合使用的方法,您可以使用自定義的Frama-C插件。在這種情況下,使用'Global.iter_on_fundecs'來檢查每個函數。 'fundec'是一個帶有字段'sformals'的記錄,它是一個參數變量列表;你想檢查這個列表的最後一個元素的類型。 – 2011-05-20 11:50:40

回答

1

您可以首先在收集器中收集所有參數的數字(使用ParamNumber屬性)。 然後選擇Para​​mNumber等於最高收集數字的參數(您可以使用MAX()來獲得)。 然後你可以檢查這個參數是否有適當的類型。

Irek