999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

C程序變量錯誤檢測技術的設計與實現

2016-12-15 02:47:16杜世奇
軟件 2016年11期
關鍵詞:程序檢測

杭 歡,杜世奇

(1. 北京郵電大學網絡技術研究院,北京市 100876;2. 安徽師范大學數學計算機科學學院,安徽省蕪湖市 241002)

C程序變量錯誤檢測技術的設計與實現

杭 歡1,杜世奇2

(1. 北京郵電大學網絡技術研究院,北京市 100876;2. 安徽師范大學數學計算機科學學院,安徽省蕪湖市 241002)

C語言自其出現以來便以其優秀的特性被廣泛應用于程序開發中,如今C語言程序在各大領域依然發揮著重要的作用,尤其在一些重要的部門領域如航空航天、醫療、銀行等部門提供著系統支持,相應的在軟件安全和系統穩定上有更高的要求。本文主要針對C語言程序中常見的變量異常檢測進行研究,以現有開源軟件位基礎實現編譯器前端對C語言源程序進行詞法語法解析,并實現基于C語言源代碼插樁檢測程序變量使用異常的實驗,對“變量使用前未賦初值”、“變量值溢出”等變量使用錯誤錯誤實現檢測和反饋。

C語言;變量異常;代碼插樁;編譯器

本文著錄格式:杭歡,杜世奇. C程序變量錯誤檢測技術的設計與實現[J]. 軟件,2016,37(11):84-87

0 引言

C語言誕生于1972年,以簡潔和功能強大而著稱于世,直到數十年后的今天仍被廣泛使用,具有十分重要的地位。目前C語言的應用領域仍十分廣闊,當對性能有較高要求時,常常會選擇使用C語言實現,如Linux操作系統、Nginx服務器、GCC編譯器等等。

1 課題研究的意義和需求

C語言的普及決定了其安全性和穩定性對社會生產至關重要,但是與Java等更加高級的編程語言相比,C語言提供的異常處理等機制比較簡單,絕大部分情況下,程序員需要自己保證代碼的正確性,而錯誤的代價常常是軟件或系統崩潰。因此,C程序員們需要付出更多努力去編寫C程序,而本文提供的技術可以幫助C語言使用者發現程序變量的使用錯誤,提高軟件的安全性和穩定性。

2 相關概念和技術

2.1 代碼插樁

插樁即是在被測程序中人為的插入一些探測性程序段,執行時獲取程序的控制流和數據流信息。設計插樁方案時需要考慮到插樁位置、插樁策略和插樁時間等因素[1]。

以插樁時間為維度常見有基于源代碼的插樁和機遇目標代碼的插樁之分。

源代碼插樁技術是在對程序源代碼進行詞法和

語法的分析后在需要檢測的位置插入探針結構,之后隨同編譯過程中的源碼一起構建克執行程序塊并在測試期間執行檢測,因此源代碼插樁的準確度較高。然而由于編程語言種類繁多,進行源代碼插樁對不同的語言要實現相對應的版本,工作量較大。

目標代碼插樁是在目標代碼生成之后再插入探針,探針程序的實現上只與系統底層或硬件相關而無需考慮源代碼是何種語言實現的,解決了源代碼插樁的弊端,但目標代碼插樁也有其自身的弊端,因目標代碼相對于源代碼較難理解,不易處理,對目標代碼的分析和插樁實現較為困難,準確度較低[2]。

2.2 Flex和Bison

Flex是一個詞法分析器生成工具,通過讀入一個有特定格式的輸入文件來生成相應的分析器。該輸入文件包含描述模式的正則表達式和對該模式進行處理的C代碼,Flex對其解析之后生成解析函數,并輸出到一個具有特定文件名的C代碼源文件中,可包含或調用其中的代碼以使用此分析器。

Bison是自由軟件基金會GNU項目開發的一個語法分析器生成器,主要作用是將LALR(1)上下文無關文法的描述轉化成分析該文法的C程序,兼容Yacc,并在其基礎上做了一些改進。Bison經常和Flex一起使用,同樣需要讀入特定的輸入文件來生成相應的語法分析器。

3 詞法語法分析器的實現

對C語言程序變量的插裝處理過程首先需要構建編譯器前端,在對源代碼進行完整的詞法、語法分析的基礎上,構造出程序的符號表和語法樹等源碼結構化數據,用于之后的探針代碼的插入分析和處理。詞法和語法分析器通過開源軟件構造,下圖展示了相關過程和工具:

圖1 步驟及工具

我們分別以Flex和Bison工具為基礎生成的相應的詞法和語法分析邏輯對C語言程序驚醒此法和語法上的分析并產生對應的語法樹結構數據,獲取源代碼的結構化語義信息,針對變量使用節點上進行節點插裝來實現運行期變量檢測。

3.1 文法語法分析器的生成

語法定義完成后,需要將輸入文件轉換為內部標記類型的Token并存儲在內存中以備使用,使用Flex完成。

文法分析器使用Bison生成。

語句包括聲明、表達式、選擇、循環、復合語句和空語句,作為Bison輸入文件實現產生類C語言文法的語法分析器的[3]。

3.2 設計AST(抽象語法樹)

抽象語法樹是程序的一種結構化形式,用樹形結構來保存源代碼的語法結構信息。

抽象語法樹描述了源程序結構信息在內存中的表現形式,首先需要設計好語法樹節點作為語法分析中的數據結構,為每個語義單元創建結構。函數的聲明、調用,變量的聲明、引用,這些都構成了抽象語法樹的節點[4]。

抽象語法樹節點設計如下圖,如圖2所示。

3.3 符號表結構設計

符號表是在編譯前期有編譯器前段對源代碼進行分析的過程中保存的一種數據結構,用來存儲源代碼信息的表格的統稱,包含常數表、變量名表、函數名表、標號表等[5]。源程序中的每個標識符都會在符號表中建立一個條目,并記錄這個標識符的相應信息,如類型、內存地址和作用域等。

C語言是一種靜態類型語言,即在使用標識符前,都需事先定義或聲明。符號表中保存了當前狀態下已存在的標識符,可以用來判斷某個標識符是否未經定義或聲明就使用。

4 C語言程序檢測技術的實現

4.1 總體流程

對研究和設計部分的結果進行組裝和細化,我們得到了下面流程設計圖:

主要分為分析和檢測兩大部分,通過詞法語法分析得到源代碼的分析結果后對其中的變量使用情況進行檢測。

4.2 檢測流程

源代碼經過詞法和語法分析后就可以獲得相應的抽象語義樹,基于語義樹信息對源程序進行分析和插樁操作。

具體過程是,遍歷抽象語義樹,獲取樹中的每個節點保存的語義信息,對于變量聲明、變量引用和變量初始化或賦值等不同信息,采用不同的操作,

如新增變量信息、判斷變量是否已聲明、檢測變量是否已初始化等,并輸出相應結果。

流程如圖4。

圖2 節點結構定義

圖3 分析流程圖

4.3 檢測實現

4.3.1 詞法語法分析實現

在對源代碼進行實際的分析和插裝處理之前,需要對源程序進行一定的預處理,刪除冗余的注釋信息和用于代碼格式化的字符,避免后期處理冗余處理這些無用自負字符,然后將處理后的程序代碼轉存到另一個文件。

預處理后的源程序經過詞法分析,生成描述Token的Token列表文件,Token信息一方面用來進行下一步的語法分析,另一方面保存變量的相關信息,為后續的變量檢測作準備;再經過語法分析,生成源程序對應的抽象語法樹信息文件。自動地進行分析和插裝處理插入探針程序用以以檢測變量的使用情況,但是過多的探針程序會嚴重影響程序的性能,因此需要謹慎地設計探針程序的數量和插入位置[6]。

4.3.2 變量使用異常檢測實現

完成了對源代碼的分析之后,得到了對應于源代碼的語法樹,基于這棵語法樹對程序中的變量聲明、賦值和引用等進行檢測。

變量未聲明檢測:C語言中變量和函數在使用前必須已定義或聲明,根據符號表中標識符信息檢測當前變量或函數名是否可用。

變量未初始化或未賦值檢測:若變量已聲明,則此變量可用,但未初始化和賦值的變量其值是隨機的,訪問此類變量可能造成系統崩潰,C語言本身對此沒有強制規定,由程序員保證安全性。本文實現的技術對此類情況提供了檢測。

變量值溢出檢測:C語言的變量是有類型的,如int、float等,變量類型對應存儲方式,如編碼和長度,計算機在分配內存時嚴格按照變量聲明的類型分配固定字節數的內存,因而變量的表示范圍是有限的。若在不同類型的變量之間進行賦值,可能會出現溢出,即所賦值的變量大小超過被賦值變量所能表示的范圍時,原始數據會被截斷,被賦值變

量只能取得部分數據。此時,所取得的數據可能是無意義的,在某些情況下會導致嚴重后果。本文實現的技術能夠對賦值進行檢測,當所賦的值超過被賦值變量所能表示的范圍時,進行相應的提示。

下圖是對源代碼運行本文實現的檢測程序后的結果:

圖4 檢測流程圖

圖5 變量檢測運行結果

程序對源代碼進行詞法語法分析后檢測變量的使用,結果可以如預期對變量使用前未聲明、變量未初始化錯誤和變量值溢出等情況進行提示,可以有效避免因變量使用錯誤產生的不必要的錯誤。

5 總結

本文基于開源軟件設計并實現了C語言變量檢測技術,能夠對源代碼中的變量使用異常進行檢測并輸出,提高了程序的健壯性,基本完成了預定設計需求,達到了預計設計目標;但由于時間和技術水平的不足,仍存在一定的缺陷。下一步工作是繼續研究和完善相關技術,提供更豐富的檢測功能,進一步提高其實用價值。

[1] 郭銳. 用于覆蓋測試的代碼插樁程序設計與實現[J]. 科學技術與工程, 2013, 13(30): 9072-9077.

[2] 蔡建平. 覆蓋測試中高效代碼插樁技術的研究[J]. 微計算機信息(嵌入式與SOC), 26(9-2): 86-88.

[3] 晏華. 代碼自動插裝技術的研究與實現[J]. 電子科技大學學報, 2002, 31(1): 62-66.

[4] 何群, 陳英. 面向對象語言編譯器的自動測試平臺[J]. 計算機工程, 2005, 31(14): 99-101.

[5] [美]弗雷澤著, 王挺等譯. 可變目標C編譯器: 設計與實現[M]. 電子工業出版社, 2005, 1.

[6] 劉慧梅. 軟件測試中代碼分析與插裝技術研究[J]. 陜西國防工業職業技術學院學報, 2005, 24(2): 7-11.

Detection Technology about C Program Variable

HANG Huan1, DU Shi-qi2
(1. Institute of Network and Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China; 2. Mathematics and Computer Science School, Anhui Normal University, Beijing 241002, China)

Since its inception, C has been widely used in the development of programs with its excellent features. Today, the C language program still plays an important role in various fields, especially in some important sectors such as aerospace, medical, banking, etc. Departments to provide system support. Therefore, higher security and stability are required in systems and softwares developed by C language. In this paper, we study the detection technology about mistakes in using C program variable. We implement a compiler front-end based on opensource software to do lexical and grammar analysis for C program variable. Then we experiment with it on instrumentation to monitor errors for noninitialized variables and variable overflow.

C programming language; Variable anomaly detection; Instrumentation; Compiler

TP312

A

10.3969/j.issn.1003-6970.2016.11.018

杭歡(1991-),男,碩士研究生,SDN 杜世奇(1992-),男,本科,編譯原理。

猜你喜歡
程序檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
小波變換在PCB缺陷檢測中的應用
主站蜘蛛池模板: 亚洲天堂网视频| 免费看a级毛片| 午夜日b视频| 国产成人精品在线| 久久久久人妻一区精品色奶水| 国产好痛疼轻点好爽的视频| 国产成人久久777777| 免费无码AV片在线观看中文| 97超碰精品成人国产| 欧美精品v欧洲精品| 亚洲开心婷婷中文字幕| 26uuu国产精品视频| 久久久久国产精品嫩草影院| 四虎精品黑人视频| 91欧美亚洲国产五月天| 国产一二视频| 国产成人久视频免费| 日韩av无码DVD| 国产主播喷水| 456亚洲人成高清在线| 中文字幕永久视频| 亚洲国产精品日韩欧美一区| 激情网址在线观看| 免费观看亚洲人成网站| 国产色伊人| 在线免费观看AV| 91青青草视频在线观看的| 精品久久久久久久久久久| 92午夜福利影院一区二区三区| 热九九精品| 色爽网免费视频| 热99re99首页精品亚洲五月天| 99r在线精品视频在线播放 | 国产sm重味一区二区三区| 中文字幕在线看| 无码内射中文字幕岛国片| 狠狠色香婷婷久久亚洲精品| 91久久偷偷做嫩草影院精品| 亚洲an第二区国产精品| 在线a视频免费观看| 91精品福利自产拍在线观看| 亚洲狠狠婷婷综合久久久久| 成人国产精品网站在线看| 亚洲人成亚洲精品| 欧美国产在线一区| 在线中文字幕日韩| 538精品在线观看| 午夜久久影院| 国产精品第页| 国产一级毛片在线| 日韩专区欧美| 国产福利小视频在线播放观看| 久久精品国产999大香线焦| 片在线无码观看| 伊人大杳蕉中文无码| 91啪在线| 在线国产毛片手机小视频| 亚洲欧洲天堂色AV| 免费又爽又刺激高潮网址| www.亚洲天堂| 午夜影院a级片| 亚洲欧美日韩成人高清在线一区| 中字无码精油按摩中出视频| 久久精品国产一区二区小说| 日韩高清欧美| 国产真实自在自线免费精品| 91尤物国产尤物福利在线| AV不卡在线永久免费观看| 99国产精品免费观看视频| 蜜臀AV在线播放| 九色视频一区| 成人午夜精品一级毛片| 国产69精品久久| 日韩免费中文字幕| 精品伊人久久久久7777人| 国产成人亚洲精品色欲AV| 国产精女同一区二区三区久| 无码中文AⅤ在线观看| 国产swag在线观看| 91久久精品日日躁夜夜躁欧美| 免费人成网站在线高清| 97视频在线观看免费视频|