#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 (), чтобы получить это). Затем вы можете проверить, имеет ли этот параметр соответствующий тип.
Ирек