專利名稱:基于函數(shù)訪問全局變量的防御性編程方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)程序的安全方法,尤其是一種在有防御性編程要求的軟件 中使用的一種安全防御方法,具體地說是一種基于函數(shù)訪問全局變量的防御性編程方法。
背景技術(shù):
眾所周知,防御性編程是一種細(xì)致、謹(jǐn)慎的編程方法。為了開發(fā)可靠的軟件,需要 設(shè)計(jì)系統(tǒng)中的每個組件,以使其盡可能地“保護(hù)”自己。通過明確地在代碼中對設(shè)想錯誤進(jìn) 行檢查,防御設(shè)想錯誤的發(fā)生。這種努力防止(至少是察覺)代碼被可能錯誤的行為方式 調(diào)用時產(chǎn)生不確定的結(jié)果。防御性編程可以盡早發(fā)現(xiàn)較小的問題,而不是等到它們發(fā)展成 大的災(zāi)難的時候才發(fā)現(xiàn)。當(dāng)然,防御性編程并不能排除所有的程序錯誤。但是問題所帶來 的麻煩將會減少,并易于修改。防御性編程是一種防衛(wèi)方式,而不是一種補(bǔ)救形式。目前常 用的防御性編程方法注重對函數(shù)體的防御,但在編程中不可避免地要使用到全局變量。如 果只保護(hù)了函數(shù)體而忽視了調(diào)用全局變量時的防御措施,就在防御體系上出現(xiàn)了短板。
發(fā)明內(nèi)容
本發(fā)明的目的是針對現(xiàn)有的防御編程方法大多忽略了全局變量造成的安全問題, 設(shè)計(jì)一種基于函數(shù)訪問全局變量的防御性編程方法。本發(fā)明的技術(shù)方案是一種基于函數(shù)訪問全局變量的防御性編程方法,其特征是它包括以下三個方面 全局變量名稱隱藏,全局變量訪問函數(shù)和全局變量數(shù)據(jù)結(jié)構(gòu)的聲明,定義全局變量訪問函 數(shù);所述的全局變量名稱隱藏是指在被引用的頭文件中不出現(xiàn)被保護(hù)的全局變量的聲明, 并將定義文件作為二進(jìn)制文件提供或通過編程規(guī)范文件規(guī)定頭文件聲明以外的名稱不可 被使用即完成了全局變量名稱的隱藏;所述的全局變量訪問函數(shù)和全局變量數(shù)據(jù)結(jié)構(gòu)的聲 明是指在頭文件中聲明全局變量的數(shù)據(jù)結(jié)構(gòu)和全局變量的訪問函數(shù),并在全局變量數(shù)據(jù)結(jié) 構(gòu)中加入互斥鎖,將獲取函數(shù)與修改函數(shù)分開聲明;所述的定義全局變量訪問函數(shù)是指在 全局變量訪問函數(shù)的定義階段選擇斷言防御或其它已有函數(shù)防御方法、編程密碼防御、訪 問上下文防御和互斥防御。定義全局變量訪問函數(shù)時所采用的防御包括全局變量的獲取和修改編程密碼保 護(hù)防御、全局變量的上下文訪問控制防御和全局變量的互斥訪問控制防御。本發(fā)明的有益效果1.通過全局變量訪問密碼與訪問函數(shù)的一致性管理,防止了編程中訪問錯誤的全
局變量。2.通過區(qū)別獲取和修改全局變量的訪問密碼,做到不同權(quán)限的全局變量訪問。3.通過上下文訪問控制防御可以在多任務(wù)系統(tǒng)中通過判斷上下文屏蔽無權(quán)訪問 該全局變量的任務(wù)訪問。4.通過互斥訪問控制防御可以確保該全局變量被訪問過程的原子性。
具體實(shí)施方式
下面結(jié)合實(shí)施例對本發(fā)明作進(jìn)一步的說明。一種基于函數(shù)訪問全局變量的防御性編程方法,結(jié)合已有的防御性編程方法對軟 件進(jìn)行更全面的防御,它還可以通過使用函數(shù)的防御性編程方法對全局變量進(jìn)行防御,具 體步驟包括隱藏全局變量名稱、封裝全局變量訪問函數(shù)接口和全局變量訪問函數(shù)的防御功 能,分別按下述方法實(shí)現(xiàn)(1).隱藏全局變量名稱;在被引用的頭文件中不出現(xiàn)被保護(hù)的全局變量的聲明, 并將定義文件作為二進(jìn)制文件提供或通過編程規(guī)范文件規(guī)定頭文件聲明以外的名稱不可 被使用即完成了全局變量名稱的隱藏。(2).封裝全局變量訪問函數(shù)接口,包括全局變量數(shù)據(jù)結(jié)構(gòu)和訪問函數(shù)的聲明;如 頭文件關(guān)鍵內(nèi)容所示,在頭文件中聲明全局變量的數(shù)據(jù)結(jié)構(gòu)和全局變量的訪問函數(shù),建議 在全局變量數(shù)據(jù)結(jié)構(gòu)中加入互斥鎖,建議將獲取函數(shù)(如global_Var_get)與修改函數(shù) (如 global_var_set)分開聲明。(3).全局變量訪問函數(shù)的防御功能1 全局變量的獲取和修改編程密碼保護(hù)防 御;如斷言防御或其它已有函數(shù)防御方法、編程密碼防御等;(4).全局變量訪問函數(shù)的防御功能2 全局變量的上下文訪問控制防御;(5).全局變量訪問函數(shù)的防御功能3 全局變量的互斥訪問控制防御。以下是一個具體的對全局變量實(shí)現(xiàn)防御的軟件頭文件關(guān)鍵內(nèi)容typedef struct{BOOL locked ;//訪問互斥鎖char var_char ;int var_int ;int*var_intp ;......} global_Var_StruCt ;//全局變量數(shù)據(jù)結(jié)構(gòu)聲明extern result global_var_get (int, global_var_struct*);extern result global_var_set (int, global_var_struct);定義文件關(guān)鍵內(nèi)容global_val_struct global_val_real ;result global_var_get(int key, global_var_struct氺global—varp){[assert ()]//斷言防御或其它已有函數(shù)防御方法if (key ! = GLOBAL_VAR_GETKEY)//對該全局變量獲取加編程密碼{return(GETKEYERR0R)
}if (上下文判斷失敗)//對訪問上下文防御{return(C0NTEXTERR0R)}if (global_val_real. locked = = TRUE) // 互斥防御{return(LOCKED)}global_val_real. locked = TRUEglobal_varp- > var_char = global_val_real. var_charglobal_varp- > var_int = global_val_real. var_intglobal_varp- > var_intp = global_val_real. var_intp......global_val_real. locked = FALSEreturn (OK)}result global_var_set(int key, global_var_struct global_var){[assert ()]//斷言防御或其它已有函數(shù)防御方法if (key ! = GL0BAL_VAR_GETKEY)//對該全局變量修改加編程密碼{return(SETKEYERR0R)}if (上下文判斷失敗)//對訪問上下文防御{return(C0NTEXTERR0R)}if (global_val_real. locked = = TRUE) // 互斥防御{return(LOCKED)}global_val_real. locked = TRUEglobal_var_real. var_char = global_val. var_charglobal_var_real. var_int = global_val. var_intglobal_var_real. var_intp = global_val. var_intp......global_val_real. locked = FALSE<formula>formula see original document page 6</formula>
本發(fā)明未涉及部分均與現(xiàn)有技術(shù)相同或可采用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
權(quán)利要求
一種基于函數(shù)訪問全局變量的防御性編程方法,其特征是它包括以下三個方面全局變量名稱隱藏,全局變量訪問函數(shù)和全局變量數(shù)據(jù)結(jié)構(gòu)的聲明,定義全局變量訪問函數(shù);所述的全局變量名稱隱藏是指在被引用的頭文件中不出現(xiàn)被保護(hù)的全局變量的聲明,并將定義文件作為二進(jìn)制文件提供或通過編程規(guī)范文件規(guī)定頭文件聲明以外的名稱不可被使用即完成了全局變量名稱的隱藏;所述的全局變量訪問函數(shù)和全局變量數(shù)據(jù)結(jié)構(gòu)的聲明是指在頭文件中聲明全局變量的數(shù)據(jù)結(jié)構(gòu)和全局變量的訪問函數(shù),并在全局變量數(shù)據(jù)結(jié)構(gòu)中加入互斥鎖,將獲取函數(shù)與修改函數(shù)分開聲明;所述的定義全局變量訪問函數(shù)是指在全局變量訪問函數(shù)的定義階段選擇斷言防御或其它已有函數(shù)防御方法、編程密碼防御、訪問上下文防御和互斥防御。
2.根據(jù)權(quán)利要求1所述的基于函數(shù)訪問全局變量的防御性編程方法,其特征是定義全 局變量訪問函數(shù)時所采用的防御包括全局變量的獲取和修改編程密碼保護(hù)防御、全局變量 的上下文訪問控制防御和全局變量的互斥訪問控制防御。
全文摘要
一種基于函數(shù)訪問全局變量的防御性編程方法,其特征是它包括(1)全局變量名稱隱藏即在被引用的頭文件中不出現(xiàn)被保護(hù)的全局變量的聲明,并將定義文件作為二進(jìn)制文件提供或通過編程規(guī)范文件規(guī)定頭文件聲明以外的名稱不可被使用即完成了全局變量名稱的隱藏;(2)全局變量訪問函數(shù)和全局變量數(shù)據(jù)結(jié)構(gòu)的聲明即在頭文件中聲明全局變量的數(shù)據(jù)結(jié)構(gòu)和全局變量的訪問函數(shù),并在全局變量數(shù)據(jù)結(jié)構(gòu)中加入互斥鎖,將獲取函數(shù)與修改函數(shù)分開聲明;(3)定義全局變量訪問函數(shù)是指在全局變量訪問函數(shù)的定義階段選擇斷言防御或其它已有函數(shù)防御方法、編程密碼防御、訪問上下文防御和互斥防御。本發(fā)明可防止編程中訪問錯誤的全局變量,并實(shí)現(xiàn)不同權(quán)限的全局變量訪問;并能自動判斷上下文屏蔽無權(quán)訪問該全局變量的任務(wù)訪問。
文檔編號G06F9/45GK101807157SQ20101013587
公開日2010年8月18日 申請日期2010年3月30日 優(yōu)先權(quán)日2010年3月30日
發(fā)明者朱騫, 束元, 蔡李峰 申請人:南京恩瑞特實(shí)業(yè)有限公司