Parasoft rulewizard

#static-analysis #token #defensive-programming #parasoft

#статический анализ #токен #защитное программирование #parasoft

Вопрос:

Я пытаюсь создать статическое правило для проверки передачи токена для защитного программирования в приложении SIL4.

Правило заключается в следующем: «Каждая функция должна иметь const uint_32 в качестве последнего параметра»

ie:

 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 
  

Есть кто-нибудь, кто может мне помочь? Я бреду ощупью в темноте

Комментарии:

1. Если вы не найдете способа сделать это с помощью Parasoft, вы всегда можете использовать пользовательский плагин Frama-C. В этом случае используйте Global.iter_on_fundecs для проверки каждой функции. fundec Это запись с полем sformals , которое представляет собой список переменных-аргументов; вы хотите проверить тип последнего элемента этого списка.

Ответ №1:

Вы можете сначала собрать номера всех параметров (используя свойство ParamNumber) в коллекторе. Затем выберите параметр с параметром, равным наибольшему набранному числу (вы можете использовать MAX (), чтобы получить это). Затем вы можете проверить, имеет ли этот параметр соответствующий тип.

Ирек