Я пытаюсь создать плагин frama-c. Этот плагин зависит от плагина Value Frama-c. Я хочу получить и распечатать набор значений всех lvalue (s) в исходном коде C. Для этого я хочу использовать функции, доступные в Value.Eval_exprs, Value.Eval_op и т. Д., Например Eval_exprs.lval_to_precise_loc
.Как использовать функции в Value.Eval_expr, Value.Eval_op и т. Д. Модули плагина Value Frama-c
К сожалению, я не могу найти способ использовать эти функции в своем плагине. Я попытался выполнить шаги, упомянутые в разделе 4.10.1 (Регистрация через файл .mli) руководства по разработке плагинов Frama-c, и добавил PLUGIN_DEPENDENCIES:=Value
в мой файл Makefile, но я заметил, что файл Value.mli
пуст, и никакая функция не открывается через этот файл. После этого я смотрел на db.ml
файл в каталоге kernel
и не смогли найти какой-либо модуль, который может использоваться для доступа ко всем функциям, доступным в Eval_exprs, Eval_op и т.д.
Есть ли способ получить доступ к этим функции Value плагина от других плагин?
Спасибо за подробное объяснение. Мне удалось получить и напечатать набор значений lvalue (s) следующим образом: 'let before =! Db.Value.access (Kstmt stmt) lv в \t \t Format.fprintf out" значение lval:% a is:% a "Printer.pp_lval lv Db.Value.pretty before;' – user2888308
Мне трудно получить после состояния 'stmt', чтобы получить значения, установленные для lval после выполнения инструкции. Я думаю, что если я могу получить 'after_state', я могу получить после значения, заданного как:' let_, after =! Db.Value.eval_lval ~ with_alarms (Some Locations.Zone.bottom) after_state lv'. Можете ли вы предложить способ получить after_state? – user2888308
Вы можете использовать 'fold_stmt_state_callstack', чтобы перебирать результаты по выражению для столбца анализа. Если вам не нужен столбец, вы можете просто присоединиться ко всем возможным состояниям: 'let state_after stmt = Db.Value.fold_stmt_state_callstack Cvalue.Model.join Cvalue.Model.bottom ~ after: true stmt' – byako