码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Infer的安装及基本使用


    Infer的官网:https://fbinfer.com/docs/getting-started

    本文主要介绍Facebook公司的静态分析工具Infer的安装和基本使用。

    infer支持C,Objective-C,Java等语言。

    支持的bug类型可以在该链接处查询:https://fbinfer.com/docs/all-issue-types

    安装

    从该链接下载release包:https://github.com/facebook/infer/releases

    然后解压后,输入以下命令软链接到系统的路径。

    sudo ln -s "你的infer的路径" /usr/local/bin/infer
    
    • 1

    如果安装成功,输入help命令应该会显示相关信息。

    infer --help
    
    • 1

    使用

    在使用infer之前,确保测试的程序已经是clean过的状态。(执行make clean)

    infer分析的流程主要有两步。

    • capture:将源码翻译为infer自己的中间层语言

    • analysis:分析中间层

    infer默认是将翻译过来的中间语言存储在使用infer命令的那个目录下的infer-out/\ 。如果要更换存储目录的名字,可以用-o选项。

    infer run -o /tmp/out -- make 
    
    • 1

    在分析步骤中,infer会在中间语言对每个函数进行分析。如果发现一个函数中的错误,他会停止分析该函数,但是其他函数还是会继续分析的。

    报告的结果会存放在`infer-out/report.txt`中。

    现在我们来实际测试libpng试试看看,

    #在libpng的目录下
    export LLVM_COMPILER=clang
    ./autogen.sh
    ./configure --disable-shared
    # 如果是之前就make过的话,需要加上make clean的命令
    # 运行infer
    ./infer run -- make
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    然后可以看到infer-out目录下的report.txt报告了26个issue。

    #0
    pngset.c:583: error: Dead Store
      The value written to &max_palette_length (type int) is never used.
      581.       return;
      582. 
      583.    max_palette_length = (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
                                   ^
      584.       (1 << info_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
      585. 
    
    ...
    
    #25
    png.c:4134: error: Null Dereference
      pointer `table` last assigned on line 4126 could be null and is dereferenced at line 4134, column 10.
      4132.    else
      4133.       for (i=0; i<256; ++i)
      4134.          table[i] = (png_byte)(i & 0xff);
                     ^
      4135. }
      4136. 
    
    Found 26 issues
                    Issue Type(ISSUED_TYPE_ID): #
                        Dead Store(DEAD_STORE): 14
            Null Dereference(NULL_DEREFERENCE): 7
      Uninitialized Value(UNINITIALIZED_VALUE): 4
                  Resource Leak(RESOURCE_LEAK): 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    同时,我们还可以看见infer-out目录下有以下文件

    bugs.txt                   costs-report.json  report.json  results.db      results.db-wal
    config-impact-report.json  logs               report.txt   results.db-shm  tmp
    
    
    • 1
    • 2
    • 3

    可以看到提供了db和json格式的report。另外,bugs.txt中的内容是

    The contents of this file have moved to report.txt.

    对于一些错误,比如空指针解引用,还可以使用infer explore命令获取到bugs的trace。e.g.

    infer explore --select 25 --html
    
    • 1

    上面的命令会把25号issue的bug trace打印出来。如果要打印全部的话,可以把25替换为all。html参数是将结果保存为html,默认是不加的。

    遇到的问题

    问题1:运行infer run — make时报错CRITICAL: No compiler set. Please set environment variable LLVM_COMPILER

    输入以下命令即可解决:

    export LLVM_COMPILER=clang
    
    • 1
  • 相关阅读:
    文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《氢耦合区域综合能源系统集群双层博弈随机优化调度策略》
    angualr:CSS一个div内两个子元素的高度自适应
    jmeter数据库操作(执行多条sql语句)
    重庆人文科技学院建立“软件安全产学研基地”,推动西南地区软件安全发展
    《Operating Systems:Three Easy Pieces》 操作系统导论【二】 虚拟化内存
    CentOS 7 编译安装 Git
    第三章:最新版零基础学习 PYTHON 教程(第十四节 - Python 运算符—Python 中 == 和 is 运算符的区别)
    Spring Boot 拦截器 HandlerInterceptor的使用以及WebMvcConfigurer简单介绍
    RISC-V架构——物理内存属性和物理内存保护
    红黑树详解+模拟实现
  • 原文地址:https://blog.csdn.net/u013648063/article/details/126216139
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号