1. 程式人生 > >Facebook 的開源靜態分析工具Infer

Facebook 的開源靜態分析工具Infer

開始使用

依賴配置

https://github.com/facebook/infer/blob/master/INSTALL.md#how-to-compile-and-install-infer

下載

https://github.com/facebook/infer/releases/tag/v0.7.0

安裝

在命令列,到下載目錄,解壓:

tar xf infer-*-v0.7.0.tar.xz

cd infer-*-v0.7.0./build-infer.sh

exportPATH=`pwd`/infer/bin:$PATH

Mac 下執行指令碼報錯找不到opam

需要使用brew 安裝下(如果沒有安裝brew,請執行:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用brew 安裝opam及相關依賴,請執行:

brew install autoconf automake opam caskroom/cask/brew-cask

你可用通過在命令列執行 echo $SHELL 確定所使用的 shell。根據具體的情況調整上面的命令。

如果你是在 linux 中,如果 ~/.bash_profile 不存在的話,你也許需要把 ~/.bash_profile

 替換成 ~/.bashrc

Hello, World!

根據本頁的說明,你可以使用 Infer 嘗試檢查一些簡單的例子。你會看到 Infer 報告了一些問題,修復這些問題,再進行一次檢測,Infer 便不再報告問題。這將使得我們對 Infer 如何工作有一些初步的認識,更近一步的使用,可以參考使用者使用參考

Hello world Java

以下是一個簡答的 Java 例子。

// Hello.java
classHello{
  inttest(){
    String s = null;
    return s.length();
  }
}

通過以下命令在 Hello.java 同級目錄執行 Infer。

infer -- javac Hello.java

你將會看到以下的報告輸出:

Hello.java:5: error: NULL_DEREFERENCE
  object s last assigned on line 4 could be null and is dereferenced at line 5  

編輯檔案,加入為空檢查:

  inttest(){
    String s = null;
    return s == null ? 0 : s.length();
  }

再次執行 Infer,這次,執行結果顯示 No issues found,未發現錯誤。

Hello world Objective-C

以下是一個簡單的 Objective-C 例子:

// Hello.m
#import <Foundation/Foundation.h>

@interfaceHello: NSObject
@property NSString* s;
@end

@implementationHello
NSString* m() {
    Hello* hello = nil;
    return hello->_s;
}
@end
infer -- clang -c Hello.m

以下是錯誤報告輸出:

Hello.m:10 NULL_DEREFERENCE
  pointer hello last assigned on line 9 could be null and is dereferenced at line 10, column 12

編輯,如下修正:

NSString* m() {
    Hello* hello = nil;
    return hello.s;
}

再次執行,No issues found, 沒有報錯。

Hello world C

一個簡單的 C 例子:

// hello.c
#include <stdlib.h>

voidtest(){
  int *s = NULL;
  *s = 42;
}
infer -- gcc -c hello.c

報錯輸出:

hello.c:5: error: NULL_DEREFERENCE
  pointer s last assigned on line 4 could be null and is dereferenced at line 5, column 10

編輯,修正:

voidtest(){
  int *s = NULL;
  if (s != NULL) {
    *s = 42;
  }
}

再次執行,不在彙報錯誤,問題修復。

在進行 C 檔案分析時,Infer 使用 gcc 命令並在內部執行 clang 來解析。

因此,你可能會得到一些和 gcc 不一樣的編譯器警告以及錯誤。以下命令等效的:

相關推薦

Facebook開源靜態分析工具Infer

開始使用 依賴配置 https://github.com/facebook/infer/blob/master/INSTALL.md#how-to-compile-and-install-infer 下載 https://github.co

2018開源靜態分析工具-第一部分-python

翻譯自:https://medium.com/@prasincs/open-source-static-analysis-for-security-in-2018-part-1-python-348e9c1af1cd 翻譯:聶心明 我對靜態分析工具的態度是即愛也

2018開源靜態分析工具-第三部分-go

Gometalinter Go Metalinter( https://github.com/alecthomas/gometalinter )是本文的TLDR版本–如果你喜歡kitchensink帶給你的一切體驗,用go metalinter也足夠可以檢查所

開源靜態分析工具androguard體驗(一)

雖然在windows端免費版的IDA、VTS等工具都可用來靜態分析,但相對來說這些工具用來人工分析在合適不過,但對於專案開發,相對來說都忽視很好擴充套件。而在androguard卻很適合進行擴充套件或者移植成為自己專案的某一模組,雖然早有耳聞,但也最近才動手體驗幾把。當然,

CppCheck開源C/C++靜態分析工具安裝使用教程

最近由於C/C++專案程式碼審計,有時候開發不給相關的依賴庫,是件很蛋疼的事情。因為無法使用fortify SCA進行編譯。從而就無法掃描分析漏洞缺陷。依靠人工審計,簡直是一件很崩潰的事情,對我一個做java程式碼審計的人來說,不怎麼懂C/C++,更別說找什麼溢位,記憶體洩漏,危險函式,越界,空指標

逆向中靜態分析工具——IDA初學者筆記之字符串分析

工具 代碼 註釋 調整 菜單項 哪些 窗口 mes comment 逆向中靜態分析工具——IDA初學者筆記之字符串分析 程序中往往包含很多字符串資源,這些資源存在於PE文件的rdata段,使用IDA反編譯後,可以查找到這些字符串, 逆向破解程序通常需要一個突破點,而這個突破

逆向中靜態分析工具——IDA初學者筆記

.... 映射 鏡像 ner 列表 都是 not 判斷 2gb 逆向中靜態分析工具——IDA初學者筆記 //******************************************************************************//IDA

Gimpel Software推出C和C ++的首選靜態分析工具 PC-lint Plus,不再維護PC-lint/FlexeLint。

Gimpel Software已不再維護PC-lint/FlexeLint版本9,最終更新是2014年釋出的版本9.00L。Gimpel Software在2018年底之前為PC-lint/FlexeLint提供技術支援。 Gimpel Software已推出新產品PC-lint Plus——C

Jenkins整合原始碼靜態分析工具

https://www.cnblogs.com/topplay/p/3899254.html 1、static code analysis外掛說明 Jenkins提供了外掛”static code analysis“,該外掛蒐集不同的分析結果,並集合顯示出來。 實際上,我們可以認為sta

PHPStan 0.10.7 釋出,PHP 靜態分析工具

   PHPStan 是一款 PHP 靜態分析工具,它專注於在程式碼中發現錯誤而不實際執行它。 它甚至能在程式碼編寫測試之前捕獲整個類的錯誤。 PHPStan 讓 PHP 更接近編譯語言,這意味著在執行實際行之前可以檢查程式碼的每一行的正確性。 PHPStan 0.10.7 更

Web伺服器免費開源日誌分析工具和行為分析工具

5.google analytics 官方地址:http://www.google.com/intl/zh-CN_ALL/analytics/ Google Analytics是著名網際網路公司Google為網站提供的資料統計服務。可以對目標網站進行訪問資料統計和分析,並提供多種引數供網站擁有者使用。 6.u

c&c++反彙編與逆向分析學習筆記(2)--反彙編靜態分析工具IDA

        所謂“靜態分析”,是相對於前面提到的“動態分析”而言的。在“動態分析”過程中,偵錯程式載入程式,並以除錯模式執行起來,分析者可以在程式的執行過程中觀察程式的執行流程和計算記過。但是,在實際分析中,很多場合不方便執行目標,比如軟體的某一模組(無法單獨執行)、病

靜態分析工具PMD使用總結

簡介: PMD 掃描java原始碼,查詢潛在的問題,如: 可能的bugs,如空的try/catch/finally/switch宣告 死亡的程式碼,沒有使用的本地變數,引數和私有方法 不合標準的程式碼,如String/StringBuffer用法 過於複雜的表示式,如不必

靜態分析工具androguard

雖然在windows端免費版的IDA、VTS等工具都可用來靜態分析,但相對來說這些工具用來人工分析在合適不過,但對於專案開發,相對來說都忽視很好擴充套件。而在androguard卻很適合進行擴充套件或者移植成為自己專案的某一模組,雖然早有耳聞,但也最近才動手體驗幾把。當然

5 個有用的開源日誌分析工具

出現 實時 nsh hot 訪問協議 可靠 導致 screens cor 監控網絡活動既重要又繁瑣,以下這些工具可以使它更容易。 -- Sam Bocetta 監控網絡活動是一項繁瑣的工作,但有充分的理由這樣做。例如,它允許你查找和調查工作站和連接到網絡的設備及

靜態程式碼分析工具清單:開源篇(各語言)

本文是一個靜態程式碼分析工具的清單,共有26個工具。包括4個.NET工具、2個Ada工具、7個C++工具、4個Java工具、2個JavaScript工具、1個Opa工具、2個Packaging工具、3個Perl工具、1個Python工具。 1.NET .NET Compiler Platfo

TscanCode C/C++靜態分析開源分析工具安裝與使用

TscanCode是騰訊靜態分析團隊開發的一款開源免費的C/C++靜態分析工具,由於其比較簡單實用,準確率較高,並且掃描C/C++程式碼不需要進行編譯,所以個人覺得對C/C++專案開發挺有幫助的,就簡單介紹一下該工具的安裝與使用。 1.Tscancode下載安裝 https://github

Flawfinder開源C/C++靜態掃描分析工具安裝與使用

1.flawfinder的介紹 Flawfinder是一款開源的關於C/C++靜態掃描分析工具,其根據內部字典資料庫進行靜態搜尋,匹配簡單的缺陷與漏洞,flawfinder工具不需要編譯C/C++程式碼,可以直接進行掃描分析。簡單快速,最大的有點就是免費,不需要編譯。flawfinder工具可以

靜態代碼分析工具sonarqube+sonar-runner的安裝配置及使用

安裝配置 路徑和 tro postgresq 多表 img 主頁 目錄 Language 配置成功後的代碼分析頁面: 可以看到對復雜度、語法使用、重復度等等都做了分析,具體到了每一個方法和每一句代碼。 四種使用方式: sonarqube + sonar-runner

Phan:靜態語法分析工具

前言 公司專案需要升級到php7,存在的最大問題是如何保證語法相容性問題,人工一個一個頁面點選來看是否有報錯這個是不現實的。需要一個工具來自動檢測專案是否有不相容php7的語法。於是,用到了phan。 什麼是phan phan是一個靜態語法相容性工具,它可以分析語法是否符合指定php版本