您的位置:首页 > 移动开发 > IOS开发

iOS静态分析工具

2019-04-01 08:52 134 查看

iOS静态分析工具

  • OCLint

    安装

    // 首先设置brew的第三方库
    brew tap oclint/formulae
    // 安装
    brew install oclint
  • 使用

    // 编写hello world代码,创建Hello.m文件
    // 用OClint检查
    oclint Hello.m
    // 结果生成html文件
    oclint -report-type html -o report.html Hello.m
  • Clang静态分析器

      常用的两个工具

      scan-build
      用来运行分析器的命令行工具

    • scan-view
      包含了scan-build的工具,将scan-build执行的结果可视化

    • 使用

      // 项目目录下
      \yourpath\scan-build -k -V make
  • Clang静态分析器由分析引擎(analyzer core)和 checkers 组成

      checker基于底层分析引擎之上,通过分析引擎提供的功能我们可以编写新的checker

    • 列出当前Clang版本下所有的checker

      clang -analyze -Xclang -analyzer-checker-help
      
      debug.ConfigDumper              配置表
      debug.DumpCFG                   显示控制流程图
      debug.DumpCallGraph             显示调用图
      debug.DumpCalls                 打印引擎遍历的调用
      debug.DumpDominators            打印控制流程图的 dominance tree
      debug.DumpLiveVars              打印实时变量分析结果
      debug.DumpTraversal             打印引擎遍历的分支条件
      debug.ExprInspection            检查分析器对表达式的理解
      debug.Stats                     使用分析器统计信息发出警告
      debug.TaintTest                 标记污染的符号
      debug.ViewCFG                   查看控制流程图
      debug.ViewCallGraph             使用 GraphViz 查看调用图
      debug.ViewExplodedGraph         使用 GraphViz 查看分解图
    • 如何使用checker

      int main()
      {
      int a;
      int b = 10;
      a = b;
      return a;
      }

      使用DumpCFG这个Checker对其进行分析:

      clang -cc1 -analyze -analyzer-checker=debug.DumpCFG

      显示结果:

      int main()
      [B2 (ENTRY)]
      Succs (1): B1
      
      [B1]
      1: int a;
      2: 10
      3: int b = 10;
      4: b
      5: [B1.4] (ImplicitCastExpr, LValueToRValue, int)
      6: a
      7: [B1.6] = [B1.5]
      8: a
      9: [B1.8] (ImplicitCastExpr, LValueToRValue, int)
      10: return [B1.9];
      Preds (1): B2
      Succs (1): B0
      
      [B0 (EXIT)]
      Preds (1): B

      控制流程图把程序拆分的更加详细,有助于我们分析

  • infer

      安装

      brew install infer
    • 使用

      infer -- clang -c Hello.m
    • 工作流程

      类c语言ClangJava语言javacInfer-out问题问题...report.json
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: