前端处理结束后

  1. cbmc_parse_options.cpp:647 进入验证步骤
  2. 不同的verifier有不同的验证策略(是否在发现错误后停止等),但都会调用checker(主要分multi-path和single-path,以及是否在符号执行后进行求解)
  3. bmc使用的策略在bmc_util.cpp:setup_symex中被设置
  4. 执行过程中,程序转换为symex_target_equationt 即一系列SSA形式的指令。deagle所需的oc边都会存在这里 deagle implementation notes
    1. symex dispatcher在goto_symext::execute_next_instruction
    2. 具体细节参见 CBMC Symex and GOTO program instructions
    3. single_path的symex一次探索一个路径(氛围fifo和lifo两种策略),同时将遇到的的分支加入worklist中,上层的checker会决定是否继续进行探索;默认情况下是探索所有路径并形成一个equation进行求解。
  5. symex_from_entry_point_of开始符号执行
  6. 结束后,postprocess_equation 中对记录的oc边进行了处理,最终在SC model中被告知Deagle的求解器。