專利名稱:內層變量被外層指針引用錯誤靜態檢測方法及裝置的制作方法
技術領域:
本發明涉及計算機及電子信息技術領域,特別涉及一種內層變量被外層指針引用錯誤靜態檢測方法及裝置。
背景技術:
以函數體的域為界,內層變量是指作用域在該函數體內的變量,外層變量是指作用域處于該函數被調用的域里或者更上層域里的變量,例如在被遞歸調用的另一個函數體內,或者在全局域內的變量。“內層”和“外層”的概念是相對的,如下代碼所示,
權利要求
1.一種內層變量被外層指針引用錯誤靜態檢測方法,其特征在于,包括如下步驟 Si:對源代碼進行預處理以將所述源代碼中具有指針類型返回值的函數的返回值轉換為預定形式,其中,預處理的結果包括生成抽象語法樹,所述抽象語法樹具有變量表; 52:在所述抽象語法樹上查找是否存在未被處理的函數; 53:如果存在,則在所述未被處理的函數中查找是否存在未被處理過的取址操作語句; S4:如果存在,則根據所述變量表判斷所述取址操作語句中的地址所對應的第一變量是否是所述未被處理的函數的內層變量; 55:如果是,則在所述取址操作語句之后和所述未被處理的函數出口之間的語句中查找是否存在值與所述取址操作語句中的地址相同的第二變量;以及 56:如果存在所述第二變量,則判斷所述第二變量是否為所述未被處理的函數的內層變量,如果是則繼續查找,否則判斷所述第二變量的類型并輸出相應的錯誤信息。
2.如權利要求I所述的內層變量被外層指針引用錯誤靜態檢測方法,其特征在于,所述步驟SI進一步包括 對所述源代碼進行詞法分析,語法分析和語義分析;以及 生成所述源代碼的轉換代碼。
3.如權利要求I所述的內層變量被外層指針引用錯誤靜態檢測方法,其特征在于,所述預定形式為全局屬性的字符串。
4.如權利要求I所述的內層變量被外層指針引用錯誤靜態檢測方法,其特征在于,所述判斷第二變量的類型并輸出相應的錯誤信息,進一步包括 判斷所述第二變量的類型,如果所述第二變量的類型為所述預定形式,則輸出返回錯誤信息; 如果所述第二變量為所述未被處理的函數的參數,則輸出所述未被處理的函數中有二維指針參數引用了所述未被處理的函數中的地址的錯誤信息; 否則輸出外層指針直接引用了所述未被處理的函數中的地址的錯誤信息。
5.一種內層變量被外層指針引用錯誤靜態檢測裝置,其特征在于,包括 預處理模塊,所述預處理模塊用于對源代碼進行預處理,其中,預處理的結果包括生成抽象語法樹,所述抽象語法樹具有變量表,所述預處理模塊包括返回值類型設定模塊,所述返回值類型設定模塊用于將所述源代碼中具有指針類型返回值的函數的返回值轉換為預定形式; 未被處理函數查找模塊,所述未被處理函數查找模塊用于在所述抽象語法樹上查找是否存在未被處理的函數; 第一地址查找模塊,所述第一地址查找模塊用于在所述抽象語法樹上存在未被處理的函數時,在所述未被處理的函數中查找是否存在未被處理過的取址操作語句; 第一地址判斷模塊,所述第一地址判斷模塊用于在所述未被處理的函數中存在未被處理過的取址操作語句時,根據所述變量表判斷所述取址操作語句中的地址所對應的第一變量是否是所述未被處理的函數的內層變量; 第二地址查找模塊,所述第二地址查找模塊用于在所述取址操作語句中的地址所對應的第一變量為所述未被處理的函數的內層變量時,在所述取址操作語句之后和所述未被處理的函數出口之間的語句中查找是否存在值與所述取址操作語句中的地址相同的第二變量; 第二變量判斷模塊,所述第二變量判斷模塊用于判斷所述第二變量是否為所述未被處理的函數的內層變量,如果是則繼續查找;以及 錯誤信息模塊,所述錯誤信息模塊用于在所述第二變量不是所述未被處理的函數的內層變量時,判斷錯誤類型并輸出相應的錯誤信息。
6.如權利要求5所述的內層變量被外層指針引用錯誤靜態檢測裝置,其特征在于,所述預處理模塊還包括 分析模塊,所述分析模塊用于對所述源代碼進行詞法分析,語法分析和語義分析;以及 轉換代碼模塊,所述轉換代碼模塊用于生成所述源代碼的轉換代碼。
7.如權利要求5所述的內層變量被外層指針引用錯誤靜態檢測裝置,其特征在于,所述預定形式為全局屬性的字符串。
8.如權利要求5所述的內層變量被外層指針引用錯誤靜態檢測裝置,其特征在于,錯誤信息模塊包括 錯誤類型判斷模塊,所述錯誤類型判斷模塊用于判斷所述錯誤類型,如果所述第二變量的類型為所述預定形式,則所述錯誤類型為函數返回錯誤,如果所述第二變量為所述未被處理的函數的參數,則所述錯誤類型為二維指針參數引用所述未被處理的函數中的地址,否則所述錯誤類型為外層指針直接引用所述未被處理的函數中的地址; 錯誤信息輸出模塊,所述錯誤信息輸出模塊用于輸出所述錯誤信息,其中所述錯誤信息包括所述錯誤類型。
全文摘要
本發明公開一種內層變量被外層指針引用錯誤靜態檢測方法,包括對源代碼進行預處理;查找是否存在未被處理的函數;如果存在則在未被處理的函數中查找是否存在未被處理過的取址操作語句;如果存在則根據變量表判斷取址操作語句中的地址所對應的第一變量是否是未被處理的函數的內層變量;如果是則在取址操作語句之后和未被處理的函數出口之間的語句中查找是否存在值與取址操作語句中的地址相同的第二變量;如果存在則判斷第二變量是否為未被處理的函數的內層變量,如果是則繼續查找,否則輸出相應的錯誤信息。本發明可有效節省人力成本,提高效率,提升目標代碼穩定性,檢測準確性好。本發明還公開了一種內層變量被外層指針引用錯誤靜態檢測裝置。
文檔編號G06F11/36GK102855183SQ20121011534
公開日2013年1月2日 申請日期2012年4月18日 優先權日2012年4月18日
發明者王瑀屏, 白楊 申請人:清華大學