You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Frama-C中调用图验证插件的问询:基于白名单的函数调用合规性检查方案

Frama-C中调用图验证插件的问询:基于白名单的函数调用合规性检查方案

嘿,刚好我之前在项目里用Frama-C做过类似的函数调用合规性检查,给你几个实用的方案,完全匹配你的需求:

  • Call Graph (CG) 插件:最直接的轻量方案
    Frama-C自带的CG插件就是专门用来生成和分析程序调用关系的,完全能覆盖你的基础需求。你只需要在命令行里执行:
    frama-c -cg your_program.c
    它会输出完整的调用图结构,包含所有函数的调用链路。你要区分内部/外部调用的话,CG插件还支持过滤选项,能只显示外部函数的调用链——也就是那些没在当前代码里定义的extern函数调用,这样你只需要检查这些调用是否都在你的白名单里就行。如果想要自动化检查,还可以用Frama-C的OCaml API写个简单脚本,自动对比调用结果和白名单,不用手动逐个核对。

  • Aorai插件:不止能处理调用序列,也能搞定白名单检查
    你提到知道Aorai是处理调用序列的,但其实它的灵活性很高,完全能用来做简单的白名单验证。你只需要写一个简单的LTL(线性时序逻辑)属性,断言所有外部函数调用都必须属于你的白名单集合。比如针对你的例子,属性可以写成类似这样(要符合Aorai的语法规范):
    always (call(bar) || !call(extern))
    大概意思是“任何时候,要么调用的是白名单里的bar,要么不是调用外部函数”。然后用Aorai启动验证,它会自动扫描整个程序,找出违反这个规则的调用。这种方式适合把检查逻辑固化下来,集成到你的自动化验证流水线中。

  • ACSL注解配合WP插件:细粒度的函数级约束
    如果你需要对单个函数做更严格的精细化约束,还可以用ACSL注解搭配WP(Weakest Precondition)插件。比如给你的foo函数加个注解,确保它只调用白名单里的外部函数:

    /*@ ensures \forall call c; \call_target(c) == bar; */
    void foo() { bar(); }
    

    然后用WP插件验证这个注解,它会检查该函数的所有调用是否符合你设定的规则。这种方式适合对项目中的关键函数做针对性的合规性检查。

总结一下:如果只是快速验证外部函数调用是否符合白名单,CG插件是最省事的选择;如果需要自动化验证或者更复杂的规则约束,Aorai或者ACSL+WP的组合会更合适。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:38:00