91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過高級(jí)靜態(tài)分析進(jìn)行特定于域的屬性檢查

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:PAUL ANDERSON ? 2022-11-10 15:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

眾所周知,高級(jí)靜態(tài)分析工具擅長發(fā)現(xiàn)程序中的一般缺陷。借助自定義的屬性檢查器,最終用戶還可以擴(kuò)展它們,以查找特定應(yīng)用程序特有的特定于域的錯(cuò)誤。

先進(jìn)的靜態(tài)分析工具使用復(fù)雜的全程序、路徑敏感技術(shù)來發(fā)現(xiàn)深層語義問題,包括安全缺陷和安全漏洞。這些工具識(shí)別的幾個(gè)缺陷可以在CWE/SANS前25個(gè)最危險(xiǎn)的編程錯(cuò)誤中找到,其中列出了為了降低安全風(fēng)險(xiǎn)而要避免的最重要的錯(cuò)誤。

具體來說,開箱即用的高級(jí)靜態(tài)分析工具可以找到通用編程缺陷。來自靜態(tài)分析工具的典型通用報(bào)告可能會(huì)顯示警告,例如未初始化的變量、緩沖區(qū)溢出、無法訪問的條件和無法訪問的調(diào)用等;但是,并非所有安全漏洞或安全錯(cuò)誤都是由一般問題引起的。許多缺陷是特定應(yīng)用所獨(dú)有的。

這些工具的一個(gè)經(jīng)常被低估的方面是它們是可擴(kuò)展的,因此通常也可以對(duì)其進(jìn)行配置或編程以查找違反特定于域的規(guī)則的情況。因此,如果開發(fā)團(tuán)隊(duì)有自己的內(nèi)部規(guī)則來使用專有API,或者要求程序員使用特定的習(xí)慣用語,那么通常可以編寫一個(gè)檢查器來表示違反這些規(guī)則。因此,程序員通常只需很少的編程工作,就可以顯著增加他們從工具中獲得的價(jià)值。

一個(gè)常見的用例是當(dāng)發(fā)生錯(cuò)誤并觸發(fā)漫長而痛苦的診斷和調(diào)試期時(shí)。找到缺陷后,明智的做法是首先在代碼中查找重復(fù)錯(cuò)誤的其他位置,然后采取措施檢測錯(cuò)誤是否再次發(fā)生。對(duì)現(xiàn)有代碼和新代碼運(yùn)行自定義檢查可能是實(shí)現(xiàn)此目的的有效、低成本方法。這些工具的工作原理以及如何自定義它們的檢查器是使用 CodeSonar 中的代碼片段描述的,盡管這些原則也可以與其他高級(jí)靜態(tài)分析工具一起使用。

高級(jí)靜態(tài)分析的工作原理

要了解擴(kuò)展的不同編寫方式,首先要了解什么是靜態(tài)分析,以及靜態(tài)分析工具如何在后臺(tái)工作。

靜態(tài)分析工具的工作方式與編譯器非常相似。他們將源代碼作為輸入,然后對(duì)其進(jìn)行解析并轉(zhuǎn)換為中間表示 (IR)。高級(jí)靜態(tài)分析工具架構(gòu)的框圖如圖 1 所示。編譯器將使用 IR 生成目標(biāo)代碼,而靜態(tài)分析工具保留 IR,而檢查器通常通過遍歷或查詢 IR 來實(shí)現(xiàn),查找指示缺陷的特定屬性或模式。

圖1:高級(jí)靜態(tài)分析工具的架構(gòu)

poYBAGNsqHWASNl7AABJrDpWD9s224.jpg

高級(jí)工具從復(fù)雜的符號(hào)執(zhí)行技術(shù)中獲得強(qiáng)大功能,這些技術(shù)通過控制流圖探索路徑。這些算法跟蹤程序的抽象狀態(tài),并知道如何使用該狀態(tài)來排除對(duì)不可行路徑的考慮。

特定于域的屬性的檢查器可以訪問這些表示形式,并以各種方式利用分析算法。

自定義檢查器

最終用戶如何創(chuàng)作自定義屬性檢查器?這在很大程度上取決于屬性的性質(zhì),因此有幾種機(jī)制可用:

可以通過向配置文件添加指令來擴(kuò)展現(xiàn)有檢查器。

用戶可以向其代碼添加注釋,以指示分析查找某些屬性。如果用戶不希望干擾源代碼,則可以以面向方面的方式在側(cè)面完成這些注釋。

API 允許用戶訪問所有中間表示形式。通常,使用訪問者模式,允許擴(kuò)展利用分析已在執(zhí)行的遍歷。

讓我們仔細(xì)看看這些機(jī)制。

配置文件

這些先進(jìn)的靜態(tài)分析工具實(shí)現(xiàn)了數(shù)十個(gè)檢查器。通常,用戶需要一個(gè)與內(nèi)置檢查器略有不同的檢查器,并且其中許多檢查器都設(shè)計(jì)為可擴(kuò)展的。一類檢查器查找禁止使用的函數(shù)。例如,眾所周知,C 庫函數(shù) get 是不安全的。檢查器由一個(gè)階段實(shí)現(xiàn),該階段查找對(duì)函數(shù)名稱的引用,然后將它們與一組正則表達(dá)式進(jìn)行匹配。通過向配置文件添加行來向此集合添加其他正則表達(dá)式是一件簡單的事情。

代碼注釋

編寫檢查器的第二種方法是向代碼添加注釋。

例如,假設(shè)有一個(gè)名為 foo 的內(nèi)部函數(shù)采用單個(gè)整數(shù)參數(shù),并且當(dāng)此參數(shù)為 -1 時(shí)引入了潛在的安全漏洞??梢酝ㄟ^向foo主體添加一些代碼來實(shí)現(xiàn)對(duì)這種情況的檢查,如下所示:

void foo(int x)

{

#ifdef __CSURF__

csonar_trigger(x, “==”, -1,

“Dangerous call to foo()”);

#endif __CSURF__

}

#ifdef構(gòu)造可確保常規(guī)編譯器看不到此新代碼。但是,當(dāng)該工具分析此代碼時(shí),會(huì)看到對(duì)csonar_trigger的調(diào)用。因此,此調(diào)用從未實(shí)際執(zhí)行,而是由工具解釋為對(duì)基礎(chǔ)分析引擎的指令。如果分析得出結(jié)論,可能滿足觸發(fā)條件,則它將發(fā)出帶有給定消息的警告。

大多數(shù)程序員不喜歡用這樣的注釋來混淆他們的代碼,所以有一種替代方法來實(shí)現(xiàn)這種檢查,允許它寫在單獨(dú)的文件中。當(dāng) foo 的源代碼不可用時(shí),例如當(dāng)它位于第三方庫中時(shí),此方法也適用。為此,檢查器的作者將編寫一個(gè)替換函數(shù),如下所示:

void csonar_replace_foo(int x)

{

csonar_trigger(x, “==”, -1,

“Dangerous call to foo()”);

foo();

}

當(dāng)分析看到csonar_replace_foo的定義時(shí),它會(huì)將代碼中的所有 foo 調(diào)用(csonar_replace_foo 內(nèi)部的調(diào)用除外)視為對(duì) csonar_replace_foo 的調(diào)用。

此觸發(fā)器習(xí)慣用法適用于檢查時(shí)態(tài)屬性,尤其是函數(shù)調(diào)用序列。假設(shè)有一條規(guī)則說,在 foo 執(zhí)行時(shí),永遠(yuǎn)不應(yīng)該調(diào)用 bar。可以按如下方式實(shí)施檢查:

static int foo_is_executing = 0;

void csonar_replace_foo(int x) {

foo_is_executing = 1;

foo(x);

foo_is_executing = 0;

}

void csonar_replace_bar(void) {

csonar_trigger(foo_is_executing,

“==”, 1,

“Call to bar from foo”);

bar();

}

請(qǐng)注意,全局狀態(tài)變量用于記錄 foo 是否處于活動(dòng)狀態(tài)。在輸入 foo 之前,它被設(shè)置為 1,然后在 foo 返回后重置為零。然后在 bar 中的觸發(fā)器中檢查此變量,如果設(shè)置為 1,將發(fā)出警告。

前面的示例演示如何檢查全局屬性。相同的機(jī)制可用于編寫對(duì)單個(gè)對(duì)象的屬性的檢查??梢詫傩愿郊拥綄?duì)象以跟蹤其狀態(tài)。

這種方法允許用戶幾乎像編寫動(dòng)態(tài)檢查一樣編寫靜態(tài)檢查。這種檢查的 API 很小,語言是 C,所以有一個(gè)溫和的學(xué)習(xí)曲線。這種簡單性具有欺騙性:該技術(shù)可用于實(shí)現(xiàn)相當(dāng)復(fù)雜的檢查。

用于中間表示的 API

實(shí)現(xiàn)自定義檢查的最終方法是使用提供對(duì)基礎(chǔ)表示形式 (IR) 的訪問權(quán)限的 API。一家公司使用此 API 查找用于處理硬件錯(cuò)誤的自定義習(xí)慣用法的沖突。

此 API 也可用于其他程序分析任務(wù)。例如,一家醫(yī)療設(shè)備公司主要使用一種工具,不僅識(shí)別其代碼中的潛在任務(wù)問題,而且還發(fā)出允許他們交互式探索堆棧配置屬性的信息。其他應(yīng)用程序包括收集代碼的自定義指標(biāo)和生成程序可視化工具的輸入。

可以使用訪問者模式編寫許多檢查 - 該函數(shù)作為給定類型的每個(gè) IR 元素的回調(diào)調(diào)用??梢詾榭刂屏鲌D和語法樹中的文件、標(biāo)識(shí)符、子程序和節(jié)點(diǎn)定義訪問者。訪問者的接口允許與構(gòu)造進(jìn)行模式匹配。

CodeSonar具有一種特殊的訪問者類型,在控制流圖的路徑探索期間調(diào)用該訪問者。這允許檢查器作者編寫復(fù)雜的檢查,以利用該工具的內(nèi)置路徑敏感程序分析功能。這種檢查器的一個(gè)關(guān)鍵方面是它使用分析部分,消除了對(duì)不可行路徑的探索,這會(huì)自動(dòng)降低誤報(bào)結(jié)果的概率。

提高軟件質(zhì)量

先進(jìn)的靜態(tài)分析工具已成為軟件開發(fā)人員必不可少的工具,因?yàn)樗鼈兡軌虬l(fā)現(xiàn)嚴(yán)重的安全和安全缺陷。創(chuàng)作自定義檢查器是提高這些工具有效性的低成本方法。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2390

    瀏覽量

    66827
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51692
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    變頻器的靜態(tài)調(diào)試步驟

    變頻器的“靜態(tài)調(diào)試”通常有兩種理解:一種是指電機(jī) 不旋轉(zhuǎn) 的情況下,讓變頻器自動(dòng)測量電機(jī)電氣參數(shù)的 “靜態(tài)自學(xué)習(xí)” (或靜態(tài)辨識(shí));另一種更廣泛的含義是指變頻器在 帶電機(jī)但不帶負(fù)載 的情況下,
    的頭像 發(fā)表于 03-11 07:36 ?255次閱讀
    變頻器的<b class='flag-5'>靜態(tài)</b>調(diào)試步驟

    什么是位

    數(shù)據(jù)結(jié)構(gòu),稱為“位”或“位段”。 所謂“位”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說明每個(gè)區(qū)域的位數(shù)。 每個(gè)有一個(gè)域名,允許在程序中按域名進(jìn)行操作。這樣就可以把幾個(gè)不
    發(fā)表于 12-15 08:07

    如何用泰克示波器進(jìn)行眼圖分析

    在現(xiàn)代高速數(shù)字通信系統(tǒng)中,眼圖分析是評(píng)估信號(hào)完整性和傳輸質(zhì)量的核心工具。泰克示波器憑借其高精度和豐富的分析功能,成為工程師進(jìn)行眼圖測試的首選設(shè)備。本文將詳細(xì)介紹使用泰克示波器進(jìn)行眼圖
    的頭像 發(fā)表于 12-10 17:26 ?1171次閱讀
    如何用泰克示波器<b class='flag-5'>進(jìn)行</b>眼圖<b class='flag-5'>分析</b>

    經(jīng)營數(shù)據(jù)分析可以通過哪些方式

    在數(shù)聚股份看來,提起經(jīng)營數(shù)據(jù)分析,大家往往會(huì)聯(lián)想到一些密密麻麻的數(shù)字表格,或是高級(jí)的數(shù)據(jù)建模手法,再或是華麗的數(shù)據(jù)報(bào)表。其實(shí),“ 分析 ”本身是每個(gè)人都具備的能力,對(duì)于業(yè)務(wù)決策者而言,則需要掌握一套
    的頭像 發(fā)表于 12-05 16:31 ?653次閱讀

    芯片制造檢驗(yàn)工藝中的全數(shù)檢查

    在IC芯片制造的檢驗(yàn)工藝中,全數(shù)檢查原則貫穿于關(guān)鍵工序的缺陷篩查,而老化測試作為可靠性驗(yàn)證的核心手段,通過高溫高壓環(huán)境加速潛在缺陷的暴露,確保芯片在生命周期內(nèi)的穩(wěn)定運(yùn)行。以邏輯芯片與存儲(chǔ)器芯片的測試
    的頭像 發(fā)表于 12-03 16:55 ?879次閱讀
    芯片制造檢驗(yàn)工藝中的全數(shù)<b class='flag-5'>檢查</b>

    程序運(yùn)行慢,是否需檢查算法時(shí)間復(fù)雜度過高?

    程序運(yùn)行慢,需檢查算法時(shí)間復(fù)雜度是否過高?
    發(fā)表于 11-17 08:08

    什么是CVE?如何通過SAST/靜態(tài)分析工具Perforce QAC 和 Klocwork應(yīng)對(duì)CVE?

    本文將為您詳解什么是CVE、CVE標(biāo)識(shí)符的作用,厘清CVE與CWE、CVSS的區(qū)別,介紹CVE清單內(nèi)容,并說明如何借助合適的靜態(tài)分析工具(如Perforce QAC/Klocwork),在軟件開發(fā)早期發(fā)現(xiàn)并修復(fù)漏洞。
    的頭像 發(fā)表于 10-31 14:24 ?545次閱讀
    什么是CVE?如何<b class='flag-5'>通過</b>SAST/<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>工具Perforce QAC 和 Klocwork應(yīng)對(duì)CVE?

    如何在Zephyr中進(jìn)行靜態(tài)代碼分析

    在嵌入式軟件開發(fā)中,“能編譯通過”并不等于“可以放心交付”。安全性、可靠性和合規(guī)性是產(chǎn)品能否順利量產(chǎn)的關(guān)鍵。進(jìn)入量產(chǎn)的Bug會(huì)浪費(fèi)寶貴的工程時(shí)間,也會(huì)削弱用戶信任;安全漏洞可能暴露設(shè)備,帶來嚴(yán)重后果;在受監(jiān)管市場中,若未滿足MISRA或CERT檢查要求,甚至?xí)苯訉?dǎo)致產(chǎn)品
    的頭像 發(fā)表于 10-17 10:28 ?892次閱讀

    知識(shí)分享 | 使用MXAM進(jìn)行AUTOSAR模型的靜態(tài)分析:Embedded Coder與TargetLink模型

    知識(shí)分享在知識(shí)分享欄目中,我們會(huì)定期與讀者分享來自MES模賽思的基于模型的軟件開發(fā)相關(guān)Know-How干貨,關(guān)注公眾號(hào),隨時(shí)掌握基于模型的軟件設(shè)計(jì)的技術(shù)知識(shí)。使用MXAM進(jìn)行AUTOSAR模型的靜態(tài)
    的頭像 發(fā)表于 08-27 10:04 ?742次閱讀
    知識(shí)分享 | 使用MXAM<b class='flag-5'>進(jìn)行</b>AUTOSAR模型的<b class='flag-5'>靜態(tài)</b><b class='flag-5'>分析</b>:Embedded Coder與TargetLink模型

    如何在嵌入式RF測試中實(shí)施多信號(hào)分析

    射頻(RF)測試是嵌入式系統(tǒng)開發(fā)與驗(yàn)證中的關(guān)鍵環(huán)節(jié),尤其是在電信、航空航天、汽車以及物聯(lián)網(wǎng)等行業(yè)。隨著嵌入式系統(tǒng)的日益復(fù)雜,傳統(tǒng)RF測試方法往往難以捕捉多個(gè)(時(shí)間、頻率、數(shù)字)信號(hào)之間的復(fù)雜相互作用。多信號(hào)
    的頭像 發(fā)表于 08-15 16:32 ?2888次閱讀
    如何在嵌入式RF測試中實(shí)施多<b class='flag-5'>域</b>信號(hào)<b class='flag-5'>分析</b>

    知識(shí)分享 | MXAM入門簡介:使用MXAM進(jìn)行靜態(tài)測試

    在汽車和自動(dòng)化行業(yè)中,從事基于模型的開發(fā)(MBD)的工程師致力于在保證模型質(zhì)量的同時(shí)保證模型高效。在這一背景下,應(yīng)用適當(dāng)?shù)慕9ぞ呤株P(guān)鍵。合適的工具不僅可以通過建模標(biāo)準(zhǔn)檢查分析和測試模型質(zhì)量
    的頭像 發(fā)表于 07-23 17:09 ?1627次閱讀
    知識(shí)分享 | MXAM入門簡介:使用MXAM<b class='flag-5'>進(jìn)行</b><b class='flag-5'>靜態(tài)</b>測試

    協(xié)議分析儀支持哪些高級(jí)觸發(fā)選項(xiàng)?

    協(xié)議分析儀支持多種高級(jí)觸發(fā)選項(xiàng),這些選項(xiàng)通過靈活組合協(xié)議字段、邏輯運(yùn)算和時(shí)序控制,可實(shí)現(xiàn)復(fù)雜場景下的精準(zhǔn)數(shù)據(jù)捕獲,以下是具體分類與說明:一、基于協(xié)議字段的高級(jí)觸發(fā) 精確匹配觸發(fā) 功能
    發(fā)表于 07-23 14:21

    技術(shù)資訊 I PCB 設(shè)計(jì)完成后進(jìn)行哪些檢查可以有效避免功虧一簣?

    只有當(dāng)PCB設(shè)計(jì)完整呈現(xiàn)了成功組裝所需的全部信息時(shí),設(shè)計(jì)才算真正完成。即便電路板已完成布線,仍需進(jìn)行檢查與復(fù)核,以確保PCB能夠正確組裝。針對(duì)PCB設(shè)計(jì)中無法通過設(shè)計(jì)規(guī)則來定義的內(nèi)容,則必須通過
    的頭像 發(fā)表于 07-18 18:21 ?1846次閱讀
    技術(shù)資訊 I PCB 設(shè)計(jì)完成后<b class='flag-5'>進(jìn)行</b>哪些<b class='flag-5'>檢查</b>可以有效避免功虧一簣?

    普源示波器高級(jí)觸發(fā)功能案例分析

    一、引言 在電子測量領(lǐng)域,示波器的觸發(fā)功能如同“信號(hào)捕手”,決定著波形捕獲的精準(zhǔn)度與效率。普源示波器(如DHO1204U、MSO5000系列等)不僅具備基礎(chǔ)觸發(fā)模式(邊沿觸發(fā)、脈沖觸發(fā)等),更通過高級(jí)
    的頭像 發(fā)表于 05-29 09:36 ?652次閱讀

    如何操作時(shí)域網(wǎng)絡(luò)分析進(jìn)行故障檢測?

    = 10 ns,v = 0.66c,則d ≈ 0.66 × 3×10? × 10×10?? / 2 = 0.99 m。 3. 高級(jí)分析技術(shù) 時(shí)域門控(Time Gating): 選擇特定時(shí)間窗口
    發(fā)表于 04-30 14:15