欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

源代碼級的上下文敏感性檢測方法

文檔序號:8942987閱讀:397來源:國知局
源代碼級的上下文敏感性檢測方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種上下文敏感性檢測方法,特別是涉及一種源代碼級的上下文敏感 性檢測方法。 (二)
【背景技術(shù)】
[0002] 軟件行為建模的主要目的是為了獲取軟件的狀態(tài)信息,從而對軟件的行為進(jìn)行分 析和預(yù)測。為了高效獲取軟件的狀態(tài)信息,就需要設(shè)計一種合理的建模方法。根據(jù)需求和應(yīng) 用背景的不同,研究者提出了多種軟件行為建模的方法:基于系統(tǒng)調(diào)用的短序列模型、考慮 函數(shù)調(diào)用的自動機模型、考慮函數(shù)調(diào)用參數(shù)的數(shù)據(jù)流模型等等。其中,考慮函數(shù)調(diào)用的自動 機模型在全函數(shù)范圍內(nèi)對函數(shù)的調(diào)用關(guān)系進(jìn)行建模,比較典型的模型包括:非確定的有限 狀態(tài)自動機(NFA)、下推自動機(PDA)和Dyck模型。這些模型都是與上下文敏感性有關(guān)的 建模方法,其中NFA是一種上下文不敏感的建模方法,存在不可能路徑問題;而PDA和Dyck 模型能夠區(qū)分函數(shù)不同的被調(diào)用點,能夠提供更高的建模精度,解決了不可能路徑問題。 [0003] 然而,在給定一個自動機模型進(jìn)行行為建模之前,并未考慮軟件具有何種上下文 敏感性程度,若程序中的函數(shù)不存在多處被調(diào)用的上下文時,采取上下文敏感的自動機模 型不但無法獲得計算精度的提升,反而會帶來冗余的計算開銷。如果程序中存在多處被調(diào) 用的上下文時,采用上下文不敏感的程序分析方法,則會存在不可能路徑問題,導(dǎo)致軟件在 運行時被惡意程序攻擊。因此,為了保證模型計算精度的同時,提高其可伸縮性,就需要在 建模前對軟件中的函數(shù)調(diào)用上下文進(jìn)行分析,來指導(dǎo)軟件的行為建模。上下文敏感性是影 響程序分析精度的一種重要屬性,上下文不敏感的程序分析與過程調(diào)用的上下文無關(guān),而 上下文敏感的程序分析需要考慮調(diào)用點和被調(diào)用點,能夠產(chǎn)生更為精確的分析結(jié)果。 (三)

【發(fā)明內(nèi)容】

[0004] 本發(fā)明要解決的技術(shù)問題是:提供一種源代碼級的上下文敏感性檢測方法,該方 法檢測到的上下文敏感性是程序分析的一個重要屬性,它可以用來提高函數(shù)調(diào)用上下文的 分析精度,并且有利于編譯器優(yōu)化和程序驗證。
[0005] 本發(fā)明的技術(shù)方案:一種源代碼級的上下文敏感性檢測方法,具體為:對源程序 中函數(shù)調(diào)用的上下文敏感性進(jìn)行統(tǒng)計,通過遍歷函數(shù)調(diào)用圖對每一個函數(shù)結(jié)點的調(diào)用和被 調(diào)用關(guān)系進(jìn)行梳理,統(tǒng)計出調(diào)用圖深度、調(diào)用點個數(shù)、上下文不敏感調(diào)用點個數(shù)、不敏感率 這些信息,用以判斷函數(shù)被調(diào)用的情況,以便進(jìn)行精確的軟件行為建模;
[0006] 如果一個函數(shù)在不同位置被不同調(diào)用多次,那么這個函數(shù)就是上下文不敏感的;
[0007] 函數(shù)調(diào)用圖為過程間獲取到的。
[0008] 采用遍歷的方法對函數(shù)調(diào)用圖進(jìn)行分析的具體方法如下:
[0009] 首先,獲得結(jié)點main的相關(guān)信息,結(jié)點main為程序的入口點,結(jié)點main沒有父結(jié) 點,檢測到main函數(shù)的調(diào)用深度為l,main函數(shù)中調(diào)用了子函數(shù),按照遍歷的方法獲得深度 為2的子函數(shù)結(jié)點,對于獲得到的每個結(jié)點,在敏感性信息統(tǒng)計結(jié)構(gòu)體和調(diào)用點結(jié)構(gòu)體中 記錄函數(shù)的相關(guān)信息;
[0010] 接著,對深度為2的子函數(shù)按照同樣的遍歷方法進(jìn)行遍歷獲得到深度為3的被調(diào) 用子函數(shù)結(jié)點的信息,此時,有些深度為3的子函數(shù)在函數(shù)main和深度為2的子函數(shù)中都 被調(diào)用,就會在上下文敏感信息結(jié)構(gòu)體統(tǒng)計信息中加入該不敏感函數(shù)調(diào)用點,不敏感掉用 點個數(shù)增加1 ;按照相同的方法遍歷剩余的子函數(shù),從而獲得上下文敏感性相關(guān)的信息。
[0011] 函數(shù)調(diào)用圖由0pen64編譯器的過程間分析生成,0pen64編譯器的過程間分析有 三部分:
[0012] A.過程間本地分析(Inter-Procedural Local Analysis,IPL),收集所有程序的 匯總信息;
[0013] B.過程間分析(Inter-Procedural Analysis,IPA),將過程間本地分析得到的匯 總信息建立過程調(diào)用圖,進(jìn)行其他分析;過程間分析不檢查中間表示,而是工作在匯總信息 上,包括過程間常量傳播、內(nèi)聯(lián)替換以及別名分析;
[0014] C.過程間優(yōu)化(Inter-Procedural,ΙΡ0),主要根據(jù)過程間分析的結(jié)果獲取中間 表示,對源代碼進(jìn)行變換;
[0015] 0pen64編譯器的過程間分析框架使用四種技術(shù):過程調(diào)用圖構(gòu)建、內(nèi)聯(lián)替換、別 名分析和過程克隆。
[0016] 0pen64編譯器在過程間分析時生成的函數(shù)調(diào)用圖是擴(kuò)展調(diào)用圖。
[0017] 0pen64編譯器通過檢查程序中的每個函數(shù)的函數(shù)體,為其中每個函數(shù)調(diào)用點加入 一條從調(diào)用函數(shù)到被調(diào)用函數(shù)的邊,以這樣的方式遍歷整個程序的源代碼,獲取所有函數(shù) 之間調(diào)用和被調(diào)用的關(guān)系,生成含有結(jié)點和邊信息的函數(shù)調(diào)用圖。
[0018] 敏感性信息統(tǒng)計結(jié)構(gòu)體(C0NTEXT_SENSITIVE_INF0)用以存儲和統(tǒng)計函數(shù)上下文 敏感性的相關(guān)信息,這些信息包括函數(shù)調(diào)用深度、被調(diào)用函數(shù)的個數(shù)、不敏感函數(shù)個數(shù)和概 率、不敏感的被調(diào)用函數(shù)個數(shù)和均值以及不敏感的最大深度;調(diào)用點結(jié)構(gòu)體(CALL_INF0) 用來統(tǒng)計調(diào)用點深度、調(diào)用點名稱、被調(diào)用點深度和被調(diào)用點名稱。
[0019] 該源代碼級的上下文敏感性檢測方法獲取到的上下文敏感性信息可用來指導(dǎo)軟 件行為建模:(1)上下文不敏感的軟件可以采用有限狀態(tài)自動機來構(gòu)建軟件模型;(2)上下 文敏感的軟件可以采用下推自動機、Dyck模型來構(gòu)建軟件模型;(3)既含有上下文敏感和 上下文不敏感調(diào)用點的軟件,可以采取有限狀態(tài)自動機和下推自動機相結(jié)合的方式進(jìn)行建 模。
[0020] 本發(fā)明的有益效果:
[0021] 上下文敏感性是程序分析的一個重要屬性,它可以用來提高函數(shù)調(diào)用上下文的分 析精度,并且有利于編譯器優(yōu)化和程序驗證;然而,目前針對源代碼上下文敏感性的分析相 對較少,也沒有集成在編譯器中。本發(fā)明基于0pen64高性能編譯器,實現(xiàn)了一種源代碼上 下文敏感性檢測算法,通過編譯器的過程間分析擴(kuò)展了傳統(tǒng)函數(shù)調(diào)用圖,構(gòu)建出函數(shù)擴(kuò)展 調(diào)用圖,在此基礎(chǔ)上進(jìn)行上下文敏感性分析,獲取函數(shù)調(diào)用上下文敏感性的相關(guān)信息,包括 函數(shù)調(diào)用深度、不敏感調(diào)用點個數(shù)以及最大不敏感深度等。 (四)【附圖說明】
[0022] 圖1為程序源代碼對應(yīng)的過程間函數(shù)調(diào)用關(guān)系圖;
[0023] 圖2為0pen64編譯器的過程間分析框架圖;
[0024] 圖3為傳統(tǒng)調(diào)用圖與擴(kuò)展調(diào)用圖的對比圖。 (五)【具體實施方式】
[0025] 源代碼級的上下文敏感性檢測方法為:對源程序中函數(shù)調(diào)用的上下文敏感性進(jìn)行 統(tǒng)計,通過遍歷函數(shù)調(diào)用圖對每一個函數(shù)結(jié)點的調(diào)用和被調(diào)用關(guān)系進(jìn)行梳理,統(tǒng)計出調(diào)用 圖深度、調(diào)用點個數(shù)、上下文不敏感調(diào)用點個數(shù)、不敏感率這些信息,用以判斷函數(shù)被調(diào)用 的情況,以便進(jìn)行精確的軟件行為建模;
[0026] 如果一個函數(shù)在不同位置被不同調(diào)用多次,那么這個函數(shù)就是上下文不敏感的;
[0027] 函數(shù)調(diào)用圖為過程間獲取到的。
[0028] 以下是一個含有不敏感函數(shù)調(diào)用點的程序源代碼:
[0029] show_char(char ch[], int num)
[0030] {
[0031] int count ;
[0032] for (count = I ;count< = num, count++)
[0033] putchar (ch);
[0034] }
[0035] show_insert (char ch[])
[0036] {
[0037] char cat [] = "insert";
[0038] strcat (ch, cat);
[0039] show_char(ch, strlen (ch));
[0040] }
[0041 ] int show (char ch[])
[0042] {
[0043] puts(ch);
[0044] ......
[0045] show_insert (ch);
[0046] }
[0047] int count (char ch[])
[0048] {
[0049] printf("% d\n",strlen (ch));
[0050] ......
[0051] }
[0052] main 〇
[0053] {
[0054] char ch[] = "length_count";
[0055] show (c
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
营口市| 清原| 九龙县| 柘城县| 弥勒县| 夏邑县| 江孜县| 建始县| 宾川县| 鸡泽县| 黄浦区| 彭泽县| 通渭县| 图木舒克市| 荥经县| 东源县| 大庆市| 治多县| 鸡东县| 田林县| 木里| 临清市| 昂仁县| 宜兰市| 永靖县| 乌恰县| 兴隆县| 武乡县| 巴彦淖尔市| 新蔡县| 陆河县| 昭平县| 临城县| 玉田县| 浪卡子县| 龙井市| 太仓市| 洛阳市| 商水县| 土默特左旗| 天全县|