【課程筆記】南大軟件分析課程6——指針分析介紹(課時(shí)8)

目錄:

  1. Motivation
  2. 指針分析介紹
  3. 影響指針分析的關(guān)鍵要素
  4. 分析哪些語句

重點(diǎn):

什么是指針分析笋妥?影響指針分析的關(guān)鍵因素是什么硕噩?指針分析要分析哪些指令糊识?


1.Motivation

指針分析必要性

6-1-PTA-motivation.png


2.指針分析

目標(biāo):分析程序指針可以指向哪些內(nèi)存彩倚。對(duì)于Java等面向?qū)ο笳Z言姥卢,主要分析指針指向哪個(gè)對(duì)象卷要。

說明:指針分析屬于may analysis,分析的結(jié)果是某指針?biāo)锌赡苤赶蚰男?duì)象独榴,是個(gè)over-approximation集合却妨。

示例:面向?qū)ο笳Z言中的指針指向問題。對(duì)于setB()函數(shù)括眠,this指向new A()彪标,因?yàn)槭钦{(diào)用者是a.setB();setB()中的b是x傳過來的掷豺,所以b指向new B()捞烟,A.b指向 new B()。

6-2-1-PTA示例.png

區(qū)別

  • 指針分析:分析指針?biāo)锌赡苤赶虻膶?duì)象当船。
  • 別名分析:分析兩個(gè)指針是否指向相同的對(duì)象题画,可通過指針分析來推導(dǎo)得到。

應(yīng)用:基本信息(別名分析/調(diào)用圖)德频,編譯優(yōu)化(嵌入虛擬調(diào)用)苍息,漏洞(空指針),安全分析(信息流)壹置。


3.影響指針分析的關(guān)鍵要素

指標(biāo):精度(precision)& 效率(efficiency)竞思。

影響因素:本課程,我們主要分析分配點(diǎn)的堆抽象技術(shù)钞护、上下文敏感/不敏感盖喷、流不敏感、全程序分析难咕。

因素 問題 選項(xiàng)
Heap abstraction 如何建模堆內(nèi)存课梳? ? Allocation-site ? Storeless
Context sensitivity 如何建模調(diào)用上下文? ? Context-sensitive ? Context-insensitive
Flow sensitivity 如何建挠嗟瑁控制流暮刃? ? Flow-sensitive ? Flow-insensitive
Analysis scope 分析哪部分程序? ? Whole-program ? Demand-driven

(1)堆抽象(內(nèi)存建模)

問題:程序動(dòng)態(tài)執(zhí)行時(shí)爆土,堆對(duì)象個(gè)數(shù)理論上是無窮無盡的椭懊,但靜態(tài)分析無法處理這個(gè)問題。所以為保證指針分析可以終止雾消,我們采用堆抽象技術(shù)灾搏,將無窮的具體對(duì)象抽象成有限的抽象對(duì)象挫望。也即,將有共性的對(duì)象抽象成1個(gè)靜態(tài)對(duì)象狂窑,從而限制靜態(tài)分析對(duì)象的個(gè)數(shù)媳板。

// 示例
for (...) {
    A a = new A();
}

技術(shù)概覽

6-3-1-堆抽象技術(shù)概覽.png

我們只學(xué)習(xí)Allocation-Site技術(shù),最常見也最常被使用泉哈。

Allocation-Site原理:將動(dòng)態(tài)對(duì)象抽象成它們的創(chuàng)建點(diǎn)(Allocation-Site)蛉幸,來表示在該點(diǎn)創(chuàng)建的所有動(dòng)態(tài)對(duì)象。Allocation-Site個(gè)數(shù)是有限的丛晦。

示例:循環(huán)創(chuàng)建了3個(gè)對(duì)象奕纫,我們用O2來抽象表示這3個(gè)動(dòng)態(tài)對(duì)象。

6-3-2-堆抽象示例.png

(2)上下文敏感 Context Sensitivity

問題:考慮是否區(qū)分不同call-site對(duì)同一函數(shù)的調(diào)用烫沙。

  • Context-sensitive:根據(jù)某函數(shù)調(diào)用上下文的不同匹层,多次分析同一函數(shù)。
  • Context-insensitive:每個(gè)函數(shù)只分析一次锌蓄。


    6-3-3-上下文敏感示例.png

(3)流敏感 Flow Sensitivity

問題:考慮語句順序(控制流)的影響 vs 把程序當(dāng)做無序語句的集合升筏。

方法:流敏感會(huì)在每個(gè)程序點(diǎn)都保存一份指針指向關(guān)系映射,而流不敏感則對(duì)整個(gè)程序保存一份指向關(guān)系映射瘸爽。

說明:目前流敏感對(duì)Java提升不大您访,不過在C中很有效,本課程分析的是Java剪决,所以重點(diǎn)討論流不敏感技術(shù)灵汪。

指針分析示例

6-3-4-流敏感示例.png

(4)分析范圍 Analysis Scope

問題:分析程序的哪一部分?

  • Whole-program 全程序:分析全程序的指向關(guān)系柑潦。
  • Demand-driven 需求驅(qū)動(dòng):只分析影響特定域的指針的指向關(guān)系享言。

4.分析哪些語句

問題:哪些語句會(huì)影響指針指向,那就只分析這些語句妒茬。

Java指針類型

  1. Lacal variable: x

  2. Static field:C.f (有時(shí)稱為全局變量)——不分析

  3. Instance field: x.f (對(duì)象的field)

  4. Array element: array[i] ——不分析担锤,因?yàn)殪o態(tài)分析無法確定下標(biāo)蔚晨,所以將array中所有成員映射到一個(gè)field中乍钻,等價(jià)于Instance field,所以不重復(fù)分析铭腕。如下圖所示:

    6-4-1-數(shù)組處理.png

影響指針指向的語句

  1. New: x = new T()
  2. Assign:x = y
  3. Store: x.f = y
  4. Load: y = x.f
  5. Call: r = x.k(a,...)
    • Static call: C.foo()
    • Special call: super.foo() / x.<init>() / this.privateFoo()
    • Virtual call:x.foo()

復(fù)雜的內(nèi)存訪問可以通過引入臨時(shí)變量银择,轉(zhuǎn)化為三地址代碼:

x.f.g.h = y;
// 轉(zhuǎn)化為
t1 = x.f;
t2 = t1.g;
t2.h = y;

參考

軟件分析筆記4:指針分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市累舷,隨后出現(xiàn)的幾起案子浩考,更是在濱河造成了極大的恐慌,老刑警劉巖被盈,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件析孽,死亡現(xiàn)場(chǎng)離奇詭異搭伤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)袜瞬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門怜俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人邓尤,你說我怎么就攤上這事拍鲤。” “怎么了汞扎?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵季稳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我澈魄,道長(zhǎng)景鼠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任痹扇,我火速辦了婚禮莲蜘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帘营。我一直安慰自己票渠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布芬迄。 她就那樣靜靜地躺著问顷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禀梳。 梳的紋絲不亂的頭發(fā)上杜窄,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音算途,去河邊找鬼塞耕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嘴瓤,可吹牛的內(nèi)容都是我干的扫外。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼廓脆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼筛谚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起停忿,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤驾讲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吮铭,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡时迫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谓晌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片别垮。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扎谎,靈堂內(nèi)的尸體忽然破棺而出碳想,到底是詐尸還是另有隱情,我是刑警寧澤毁靶,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布胧奔,位于F島的核電站,受9級(jí)特大地震影響预吆,放射性物質(zhì)發(fā)生泄漏龙填。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一拐叉、第九天 我趴在偏房一處隱蔽的房頂上張望岩遗。 院中可真熱鬧,春花似錦凤瘦、人聲如沸宿礁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆靖。三九已至,卻和暖如春笔诵,著一層夾襖步出監(jiān)牢的瞬間返吻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工乎婿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留测僵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓谢翎,卻偏偏與公主長(zhǎng)得像捍靠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子岳服,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355