專利名稱:對(duì)計(jì)算機(jī)程序的資源使用率執(zhí)行檢查的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及檢查計(jì)算機(jī)程序的領(lǐng)域;更具體地,本發(fā)明涉及執(zhí)行靜態(tài)和動(dòng)態(tài)的檢查,其中,靜態(tài)地驗(yàn)證計(jì)算機(jī)程序中關(guān)于動(dòng)態(tài)檢查的信息。
背景技術(shù):
程序由本文中被稱為代碼生成者的個(gè)人創(chuàng)建,并由本文中被稱為代碼消費(fèi)者的個(gè)人運(yùn)行。代碼消費(fèi)者不希望運(yùn)行由代碼生成者創(chuàng)建的不可信程序,這是因?yàn)槌绦蚪?jīng)由運(yùn)行時(shí)間庫(kù)與代碼消費(fèi)者的計(jì)算機(jī)進(jìn)行通信,而這提供了訪問(wèn)諸如文件和網(wǎng)絡(luò)之類資源的功能。代碼消費(fèi)者希望確保該程序是安全的,即它不破壞用戶數(shù)據(jù)、不將私人數(shù)據(jù)輸出到外部源并且不濫用系統(tǒng)資源。
現(xiàn)已存在多種方法用于確保計(jì)算機(jī)程序的安全。這些方法包括計(jì)算隔離、動(dòng)態(tài)檢查和靜態(tài)檢查。關(guān)于計(jì)算隔離,安全問(wèn)題的一種解決方案是隔離計(jì)算設(shè)備,禁止任意新代碼或通信信道。因?yàn)樗拗屏嗽O(shè)備的實(shí)用性,該解決方案不令人滿意。
動(dòng)態(tài)檢查是指在每一個(gè)可能不安全的操作發(fā)生之前檢查它的過(guò)程。例如,如果安全策略禁止訪問(wèn)特定目錄,則運(yùn)行時(shí)間(RT)庫(kù)或RT監(jiān)視器必須檢查每一個(gè)文件訪問(wèn)。動(dòng)態(tài)檢查具有兩個(gè)優(yōu)點(diǎn)。首先,它是準(zhǔn)確的。即,它僅檢測(cè)程序?qū)嶋H上將要進(jìn)行的安全侵害。如果檢查器檢查到侵害,則假如用戶關(guān)閉了該檢查器,該程序才實(shí)際進(jìn)行侵害。其次,它是簡(jiǎn)單的。整個(gè)檢查器由位于運(yùn)行時(shí)間庫(kù)中與適當(dāng)例程一起的簡(jiǎn)單檢查組成。然而,動(dòng)態(tài)檢查有兩個(gè)基本的缺點(diǎn)。首先,因?yàn)樗谧詈蟮目赡軙r(shí)刻處檢查錯(cuò)誤,所以它較遲。較遲是一個(gè)問(wèn)題,因?yàn)闆](méi)有警告地終止程序會(huì)令用戶吃驚或迷惑或使她丟失重要數(shù)據(jù)。此外,當(dāng)終止程序時(shí),難以恢復(fù)該程序已經(jīng)分配的操作系統(tǒng)(OS)資源,這將不利地影響其它運(yùn)行程序的性能。其次,動(dòng)態(tài)檢查是低效的。因?yàn)槊恳粋€(gè)操作在執(zhí)行之前都執(zhí)行檢查,這些檢查占用了CPU時(shí)間的相當(dāng)一部分。
在靜態(tài)檢查中,在執(zhí)行之前分析整個(gè)程序,以查看它是否是安全的。靜態(tài)檢查具有兩個(gè)優(yōu)點(diǎn)。首先,靜態(tài)檢查較早,因?yàn)樗趫?zhí)行開(kāi)始之前檢查所有的錯(cuò)誤。因此,如果檢查器驗(yàn)證了該程序,則不會(huì)發(fā)生運(yùn)行時(shí)間錯(cuò)誤,因此用戶不會(huì)丟失數(shù)據(jù),并且OS從不必終止該程序。其次,靜態(tài)檢查是高效的。根據(jù)程序文本執(zhí)行所有的檢查,因此無(wú)論如何不存在運(yùn)行時(shí)間檢查,并且可以以與完全可信程序相同的速度運(yùn)行該程序。靜態(tài)檢查還具有兩個(gè)缺點(diǎn)。首先,靜態(tài)檢查較復(fù)雜,因?yàn)樗噲D推出程序行為,而這是復(fù)雜的。其次,靜態(tài)檢查是不完備的,即它拒絕一些安全的程序。這種不準(zhǔn)確來(lái)源于兩個(gè)原因。首先。程序是復(fù)雜的。盡管檢查器能夠處理多種簡(jiǎn)單的程序,因?yàn)閷?shí)際關(guān)注的多種程序?qū)傩允遣豢膳卸ǖ?,存在它不能夠?yàn)證的一些安全程序。其次,靜態(tài)檢查器利用不完備的信息運(yùn)行,因?yàn)樗涝摮绦蚨恢榔漭斎搿顟B(tài)檢查可以產(chǎn)生的最佳結(jié)果是確定一些輸入是否會(huì)引起不安全的動(dòng)作。它不能夠確定是否實(shí)際發(fā)生了這種輸入。
在限制資源使用的上下文中,動(dòng)態(tài)檢查是指在程序運(yùn)行的同時(shí)資源管理器執(zhí)行檢查的進(jìn)程,而靜態(tài)檢查是指在程序運(yùn)行之前資源管理器執(zhí)行檢查的進(jìn)程。動(dòng)態(tài)檢查靈活但低效,而靜態(tài)檢查高效,但不靈活。
發(fā)明內(nèi)容
提出了一種方法和設(shè)備,用于對(duì)程序代碼執(zhí)行檢查。在一個(gè)實(shí)施例中,該方法包括接收程序代碼,并靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息,其中,程序代碼中所述一個(gè)或多個(gè)動(dòng)態(tài)檢查的每一個(gè)檢查器代碼中的操作。
在附圖中或多或少用圖解法示出了本發(fā)明(包括其組成和操作方法),附圖中圖1是用于檢查程序代碼的進(jìn)程的一個(gè)實(shí)施例的流程圖;圖2示出了具有添加的保留的四個(gè)程序;圖3示出了包含單個(gè)資源池的典型動(dòng)態(tài)資源檢查器,該單個(gè)資源池最初包含由代碼消費(fèi)者的安全策略分配給程序的所有資源;圖4示出了希望的資源池模型;圖5演示了通過(guò)保留的抽象資源使用安全性;圖6演示了將代碼安全性劃分到靜態(tài)和動(dòng)態(tài)組件中;圖7示出了標(biāo)準(zhǔn)Backus-Naur格式的語(yǔ)言的一個(gè)實(shí)施例的完整定義;圖8演示了代碼生成者執(zhí)行注釋(與代碼產(chǎn)生一起)以及消費(fèi)者執(zhí)行驗(yàn)證(與執(zhí)行一起);圖9演示了生成者和驗(yàn)證器之間的基本組件的另一種可能的分離,其中代碼消費(fèi)者執(zhí)行注釋和驗(yàn)證;圖10是驗(yàn)證器的一個(gè)實(shí)施例的方框圖;圖11演示了排序和分配的操作語(yǔ)義;圖12演示了條件和循環(huán)的操作語(yǔ)義;圖13演示了保留的操作語(yǔ)義;圖14是安全條件產(chǎn)生器的代碼的一個(gè)實(shí)施例;圖15是安全條件產(chǎn)生器的流程圖的一個(gè)實(shí)施例;圖16是證明器的代碼的一個(gè)實(shí)施例;圖17是描述證明器的流程圖;圖18示出了用while命令寫出的小循環(huán);圖19示出了該示例的安全條件;
圖20是示范性的蜂窩電話的方框圖;以及圖21是示范性的計(jì)算機(jī)系統(tǒng)的方框圖。
具體實(shí)施例方式
描述了一種檢查計(jì)算機(jī)程序的方法和設(shè)備。本發(fā)明使得在執(zhí)行含有針對(duì)操作的動(dòng)態(tài)檢查的該操作之前,可以在計(jì)算機(jī)程序中任意地移動(dòng)動(dòng)態(tài)檢查。本發(fā)明的實(shí)施例使用靜態(tài)信息來(lái)驗(yàn)證該程序具有足夠的動(dòng)態(tài)檢查。因此,本發(fā)明既靈活且高效。本發(fā)明同時(shí)提供了靜態(tài)和動(dòng)態(tài)檢查器的優(yōu)點(diǎn)。與動(dòng)態(tài)檢查器相同,它可以安全地執(zhí)行所有的四個(gè)程序。與靜態(tài)檢查器相同,它使用每一個(gè)程序中可用的靜態(tài)信息來(lái)更有效地運(yùn)行。在一個(gè)實(shí)施例中,此處公開(kāi)的技術(shù)應(yīng)用于所有順序的計(jì)算機(jī)程序,并比以前的方法花費(fèi)明顯更少的、實(shí)行資源限制的CPU時(shí)間。
在一個(gè)實(shí)施例中,該方法可以被用于限制計(jì)算機(jī)程序所使用的資源。資源可以包括物理資源(例如CPU、存儲(chǔ)器、盤、網(wǎng)絡(luò))和虛擬資源(例如文件、進(jìn)程)。在一個(gè)實(shí)施例中,如果程序試圖使用多于許可的資源,通過(guò)使系統(tǒng)停止該程序的執(zhí)行、產(chǎn)生中斷、出現(xiàn)異常(exception)等,來(lái)限制資源。
在一個(gè)實(shí)施例中,根據(jù)用戶定義的安全策略來(lái)限制資源。該策略規(guī)定了每一個(gè)程序可以使用的資源以及相應(yīng)的使用率限度。在一個(gè)實(shí)施例中,資源使用率限制確保了資源的使用量處于由操作系統(tǒng)或由系統(tǒng)策略規(guī)定的上限內(nèi)。注意,這可以容易地?cái)U(kuò)展到下限以及其它種限制,例如資源使用率的上限和下限。
在一個(gè)實(shí)施例中,此處描述的與代碼安全相關(guān)的技術(shù)基于用于規(guī)定與安全相關(guān)的資源保留的新抽象概念和注釋。在一個(gè)實(shí)施例中,該方法基于從操作系統(tǒng)獲得資源的新類別的指令或操作。在一個(gè)實(shí)施例中,依靠這些新指令,指示了動(dòng)態(tài)(執(zhí)行時(shí))組件和靜態(tài)(加載時(shí)或編譯時(shí))組件。因此,本發(fā)明的實(shí)施例使用混合或混雜的方法。動(dòng)態(tài)組件是從操作系統(tǒng)獲得資源并向操作系統(tǒng)返回資源的保留函數(shù)集合。如果程序在使用資源之前保留了所有的資源,則認(rèn)為該程序是安全的。靜態(tài)組件是驗(yàn)證器,檢查程序是否安全。在一個(gè)實(shí)施例中,驗(yàn)證器僅按照本文中定義的最佳方式接受安全程序。
以前的資源限制方法低效是因?yàn)樗鼈冡槍?duì)每一個(gè)資源使用來(lái)使用一個(gè)保留。由于本發(fā)明的實(shí)施例針對(duì)多個(gè)資源使用來(lái)使用一個(gè)保留,本發(fā)明更加有效。
盡管本發(fā)明的一個(gè)實(shí)施例致力于資源使用率,本發(fā)明可以擴(kuò)展到其它領(lǐng)域,例如致力于數(shù)據(jù)破壞和保密侵害。例如,希望的安全屬性是如果程序不能讀取文件,則它不能輸出該文件中的數(shù)據(jù)。
在下面的描述中,給出多個(gè)細(xì)節(jié),以提供本發(fā)明的更詳盡的解釋。然而,對(duì)于本領(lǐng)域的技術(shù)人員顯而易見(jiàn)的是,可以沒(méi)有這些特定細(xì)節(jié)而實(shí)踐本發(fā)明。在其它情況下,以方框形式而不是細(xì)節(jié)示出了公知的結(jié)構(gòu)和設(shè)備,以避免使本發(fā)明不清楚。
以算法和關(guān)于計(jì)算機(jī)存儲(chǔ)器中數(shù)據(jù)位的操作的符號(hào)表示來(lái)呈現(xiàn)下面的詳細(xì)描述的一部分。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域的技術(shù)人員用于更有效地將他們的工作內(nèi)容傳達(dá)給本領(lǐng)域其它技術(shù)人員的手段。在這里以及通常地,算法被理解為導(dǎo)致希望結(jié)果的自連貫步驟序列。這些步驟是需要物理量的物理操作的步驟。通常,盡管不必需,這些量呈現(xiàn)為能夠存儲(chǔ)、傳輸、組合、比較和其它操作的電或磁信號(hào)的形式。這被證明有時(shí)是方便的,主要是因?yàn)橐话氵@些信號(hào)作為位、值、元素、符號(hào)、字符、項(xiàng)、數(shù)等使用。
然而,應(yīng)當(dāng)注意,所有這些和類似的術(shù)語(yǔ)應(yīng)該與適當(dāng)?shù)奈锢砹肯嚓P(guān)聯(lián),并且僅僅是這些量的方便標(biāo)記。除非特定說(shuō)明,否則從下面的討論中顯而易見(jiàn),在全部描述中,使用諸如“處理”或“計(jì)算”或“元素”或“確定”或“顯示”等術(shù)語(yǔ)的討論,是指計(jì)算機(jī)系統(tǒng)或類似電子計(jì)算設(shè)備的動(dòng)作和過(guò)程,其將計(jì)算機(jī)系統(tǒng)的寄存器和存儲(chǔ)器中被表示為物理(電子)量的數(shù)據(jù)操作并轉(zhuǎn)換為計(jì)算機(jī)系統(tǒng)存儲(chǔ)器或寄存器或其它這種信息存儲(chǔ)、傳輸或顯示設(shè)備中同樣被表示為物理量的其它數(shù)據(jù)。
本發(fā)明還涉及一種執(zhí)行操作的設(shè)備??梢葬槍?duì)所需目的專門構(gòu)造該設(shè)備,或它可以包括由存儲(chǔ)在計(jì)算機(jī)中的計(jì)算機(jī)程序選擇性地激活或重新配置的通用計(jì)算機(jī)。這種計(jì)算機(jī)程序可以被存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,例如但不局限于任意種類的盤,包括軟盤、光盤、CD-ROM和磁光盤、只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、EPROM、EEPROM、磁或光卡或適用于存儲(chǔ)電子指令的任意類型介質(zhì),并且每一個(gè)均與計(jì)算機(jī)系統(tǒng)總線相連。
此處呈現(xiàn)的算法和顯示并不固有地與特定計(jì)算機(jī)或其它設(shè)備相關(guān)。根據(jù)本文的教導(dǎo),可以與程序一起使用各種通用的系統(tǒng),或可以證明組成更專用的設(shè)備來(lái)執(zhí)行所需方法步驟是方便的。多種這些系統(tǒng)所需的結(jié)構(gòu)可以從下面的描述中顯而易見(jiàn)。此外,并不參考任意特定編程語(yǔ)言來(lái)描述本發(fā)明。可以認(rèn)識(shí)到,可以使用多種編程語(yǔ)言來(lái)實(shí)現(xiàn)本文所述的本發(fā)明的教導(dǎo)。
一種機(jī)器可讀介質(zhì)包括用于存儲(chǔ)或傳輸機(jī)器(例如計(jì)算機(jī))可讀形式的信息的任意機(jī)構(gòu)。例如,機(jī)器可讀介質(zhì)包括只讀存儲(chǔ)器(“ROM”);隨機(jī)存取存儲(chǔ)器(“RAM”);磁盤存儲(chǔ)介質(zhì);光存儲(chǔ)介質(zhì);閃存設(shè)備;電、光、聲或其它形式的傳播信號(hào)(例如載波、紅外信號(hào)、數(shù)字信號(hào)等)等。
圖1是用于檢查程序代碼的過(guò)程的一個(gè)實(shí)施例的流程圖。由包括硬件(例如電路、專用邏輯電路等)、軟件(例如運(yùn)行在通用計(jì)算機(jī)系統(tǒng)或?qū)S脵C(jī)器上)或其組合的處理邏輯來(lái)執(zhí)行該過(guò)程。
參考圖1,過(guò)程開(kāi)始于處理邏輯選擇至少一個(gè)靜態(tài)檢查和至少一個(gè)用于動(dòng)態(tài)檢查的動(dòng)態(tài)檢查的組合(處理框101)。在一個(gè)實(shí)施例中,靜態(tài)檢查包括注釋形式的抽象,所述注釋對(duì)于所添加到的程序不具有動(dòng)態(tài)成本(例如,不是當(dāng)執(zhí)行程序時(shí)消耗任意時(shí)鐘周期的操作)。在一個(gè)實(shí)施例中,靜態(tài)檢查抽象地表示消耗所關(guān)注的資源的任意機(jī)器指令。
在一個(gè)實(shí)施例中,一個(gè)或多個(gè)動(dòng)態(tài)檢查包括可以添加到程序以便規(guī)定資源保留的一個(gè)或多個(gè)動(dòng)態(tài)注釋。與靜態(tài)檢查不同,動(dòng)態(tài)檢查包括當(dāng)執(zhí)行程序時(shí)被添加到程序以便要執(zhí)行一個(gè)或多個(gè)循環(huán)的操作。在一個(gè)實(shí)施例中,所述第一或多個(gè)動(dòng)態(tài)檢查中的至少一個(gè)用于檢查資源的使用率。如上所述,資源可以是物理資源(例如執(zhí)行的中央處理單元(CPU)指令、存儲(chǔ)空間、盤空間以及網(wǎng)絡(luò)帶寬)或虛擬資源(例如文件句柄、進(jìn)程)。
當(dāng)然,操作系統(tǒng)最終使所有資源實(shí)質(zhì)化。在一個(gè)實(shí)施例中,實(shí)施多種資源使用率屬性,包括當(dāng)前使用率、累積使用率和使用率的等級(jí)。
接下來(lái),處理邏輯將注釋添加到與表示靜態(tài)和動(dòng)態(tài)檢查相關(guān)的程序代碼(處理框102)。在一個(gè)實(shí)施例中,所述一個(gè)或多個(gè)注釋的至少一個(gè)包括保留一部分資源以便程序代碼使用的操作。
在注釋了程序之后,處理邏輯接收程序代碼(處理框103)。
然后,處理邏輯靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息,其中,程序代碼中所述一個(gè)或多個(gè)動(dòng)態(tài)檢查的每一個(gè)是用于檢查程序代碼中的操作(處理框104)。至少一個(gè)動(dòng)態(tài)檢查可以確定操作是否不安全。在一個(gè)實(shí)施例中,處理邏輯通過(guò)執(zhí)行所述一個(gè)或多個(gè)動(dòng)態(tài)檢查的靜態(tài)分析,靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
在一個(gè)實(shí)施例中,靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息包括靜態(tài)地檢查程序代碼中用于保留資源的操作,以確定由操作保留的資源是否足以應(yīng)付程序代碼中消耗資源的所有運(yùn)行時(shí)間操作。
在一個(gè)實(shí)施例中,處理邏輯通過(guò)檢查在運(yùn)行時(shí)間期間程序代碼是否使用一個(gè)或多個(gè)資源中比在執(zhí)行之前程序代碼已經(jīng)保留的資源還多的資源,靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
在一個(gè)實(shí)施例中,處理邏輯通過(guò)在運(yùn)行時(shí)間期間調(diào)用動(dòng)態(tài)檢查,來(lái)執(zhí)行程序代碼的動(dòng)態(tài)檢查(處理框105)。
在一個(gè)實(shí)施例中,該過(guò)程還包括對(duì)程序代碼的處理邏輯限制的資源使用率(處理框106)。這響應(yīng)確定資源使用率超出限制而發(fā)生。在一個(gè)實(shí)施例中,對(duì)程序代碼的限制資源使用率包括暫停程序代碼的執(zhí)行。在可選實(shí)施例中,響應(yīng)確定資源使用率超出限制,處理邏輯可以產(chǎn)生異?;虍a(chǎn)生中斷。
本發(fā)明的實(shí)施例使用抽象,將“acquire”用于新類別的運(yùn)行時(shí)間操作,并且將“consume”用于新類別的注釋。acquire操作是保留指令的示例,并發(fā)生在由代碼生成者創(chuàng)建的程序中。在一個(gè)實(shí)施例中,consume注釋發(fā)生在代碼消費(fèi)者的運(yùn)行時(shí)間庫(kù)中。
操作acquire n被用于執(zhí)行動(dòng)態(tài)檢測(cè),以查看程序是否能夠使用n個(gè)資源單元。在一個(gè)實(shí)施例中,如果不能,可以異常中止該程序。可以有變化,其中,acquire操作返回布爾值或產(chǎn)生用戶可處理的異常。如果資源可用,則標(biāo)記它們稍后由程序使用,因此沒(méi)有其它程序可以獲得它們。
注釋consume n標(biāo)記消耗資源的所有運(yùn)行時(shí)間操作。在一個(gè)實(shí)施例中,不執(zhí)行動(dòng)態(tài)檢查,因此沒(méi)有運(yùn)行時(shí)間的成本。然而,代碼消費(fèi)者靜態(tài)地檢查程序獲得足夠的資源以應(yīng)付所有的消耗。因此,在這種情況下,注釋consume是一種用于任意資源消耗操作的抽象。
在一個(gè)實(shí)施例中,(靜態(tài)和動(dòng)態(tài))注釋的自變量n的值為正。這可以在程序執(zhí)行之前靜態(tài)地檢查。圖2示出了添加保留的四個(gè)程序。參考圖2,Program Dynamic就在使用資源之前保留每一個(gè)資源。ProgramStatic和Mixed1在開(kāi)始處保留所有的資源。Program Mixed2在每一次其外循環(huán)處保留一些資源。與靜態(tài)檢查器不同,此處所述的技術(shù)處理所有四個(gè)程序。與動(dòng)態(tài)檢查器不同,該方法使用每一個(gè)程序中出現(xiàn)的靜態(tài)信息來(lái)更有效地執(zhí)行,并且確保動(dòng)態(tài)檢查足以確保安全。
因此,本發(fā)明的一個(gè)實(shí)施例識(shí)別原始資源使用問(wèn)題(consume≤quota)中的中點(diǎn),這使得將檢查劃分為兩個(gè)階段,對(duì)于每一個(gè)階段選擇靜態(tài)或動(dòng)態(tài)檢查的最適當(dāng)組合。
圖3示出了包含單個(gè)資源池的典型動(dòng)態(tài)資源檢查器,該單個(gè)資源池最初包含由代碼消費(fèi)者的安全策略分配給程序的所有資源。當(dāng)運(yùn)行時(shí)間庫(kù)操作消耗資源時(shí),它們從池中去除資源。如果操作需要資源但池是空的,則終止程序。
圖4示出了希望的資源池模型。參考圖4,程序在使用資源之前保留資源。由于附加的獲得操作(注釋),兩個(gè)池看起來(lái)比一個(gè)池模型更昂貴,但實(shí)際不是,這是因?yàn)楂@得操作(注釋)是動(dòng)態(tài)的,而消耗注釋是靜態(tài)的。因此,消耗注釋完全不花費(fèi)執(zhí)行時(shí)間。此外,因?yàn)楂@得操作一次將許多資源轉(zhuǎn)移到程序使用率,存在遠(yuǎn)少于消耗注釋的獲得操作。因此,兩個(gè)池模型中的獲得操作和消耗注釋比一個(gè)池模型中的消耗注釋花費(fèi)更少的時(shí)間。
可以分配、釋放、然后再次分配例如存儲(chǔ)器或文件描述符的一些資源。這些資源被稱為可更新或可再用。由再循環(huán)1注釋這些資源的釋放操作(動(dòng)態(tài)注釋),以指示該資源再次可用。此外,在有足夠資源“未使用”之后,可以執(zhí)行釋放n操作來(lái)將這些資源釋放回資源監(jiān)視器。該操作使得在該程序的不同部分再次可以進(jìn)行資源的保留,或在其它程序中使用它們。
安全策略應(yīng)用在一個(gè)實(shí)施例中,代碼消費(fèi)者定義了安全策略,該策略包括三部分資源集合、資源限度集合(可選)以及資源和操作使用的描述。
資源限度可以是可選的,在這種情況下,相應(yīng)的資源是無(wú)限的。注釋器和驗(yàn)證器可以進(jìn)行選擇以忽略無(wú)限資源。即,注釋器不需要為它們插入保留,并且驗(yàn)證器不需要留意它們。因此,如果代碼生成者而不是代碼消費(fèi)者添加了保留,下載代碼消費(fèi)者的安全策略是方便的,因此,他知道他不需要保留哪些資源。如果代碼生成者插入比所需更多的保留,代碼仍然通過(guò)驗(yàn)證,但是比所需運(yùn)行更慢。
由文中所述技術(shù)實(shí)施的示范性的安全策略包括以下內(nèi)容·設(shè)備上可以由程序打開(kāi)的窗口的最大數(shù)目是5。
·設(shè)備上任意程序可以打開(kāi)的套接字的最大數(shù)目是2。
·設(shè)備中程序可以寫入的存儲(chǔ)器的最大量是10KB。
注意,特定值是任意的。
體系結(jié)構(gòu)和協(xié)議圖5演示了通過(guò)保留的抽象資源使用率安全性。參考圖5,可以由保留來(lái)實(shí)現(xiàn)確保消耗少于或等于定額。本發(fā)明的實(shí)施例中的基本組件實(shí)施了兩個(gè)等式consume≤acquire以及acquire≤quota。在一個(gè)實(shí)施例中,靜態(tài)地檢查第一等式而動(dòng)態(tài)地檢查第二等式。圖6演示了將代碼安全性劃分到靜態(tài)和動(dòng)態(tài)組件中。參考圖6,首先由編譯器601針對(duì)consume≤acquire來(lái)靜態(tài)地檢查代碼600,然后,在機(jī)器603上運(yùn)行代碼600,動(dòng)態(tài)地確保acquire≤quota。
在一個(gè)實(shí)施例中,獲得并釋放保留指令(動(dòng)態(tài)注釋),其分別動(dòng)態(tài)地請(qǐng)求資源并將資源返回給操作系統(tǒng)。在一個(gè)實(shí)施例中,注釋被命名為消耗和再循環(huán),對(duì)靜態(tài)池(參見(jiàn)圖4)進(jìn)行操作并且不引起任何運(yùn)行時(shí)間的花費(fèi)。
為了描述靜態(tài)檢查過(guò)程,可以使用利用整數(shù)值來(lái)計(jì)算的簡(jiǎn)單命令編程語(yǔ)言。下面,僅使用在某個(gè)任意單元中測(cè)量其量值的一個(gè)關(guān)注的資源,來(lái)描述該過(guò)程。注釋消耗e被用于建模使用資源的e個(gè)單元的任意操作,其中e是語(yǔ)言中的表達(dá)式。命令獲得e從操作系統(tǒng)中保留e個(gè)資源單元。該命令會(huì)失敗,但是如果它成功,則知道了已經(jīng)為運(yùn)行程序保留了e個(gè)資源單元。分別將資源返回給操作系統(tǒng)和靜態(tài)池的相應(yīng)命令和注釋分別被稱為釋放和再循環(huán)。為此,保留但尚未使用的資源被稱為“可用”資源。
圖7示出了標(biāo)準(zhǔn)Backus-Naur格式的語(yǔ)言的一個(gè)實(shí)施例的完整定義。在一個(gè)實(shí)施例中,變量x只取整數(shù)值。如果布爾表達(dá)式b具有值“真”,則表達(dá)式cond(b,e1,e2)具有值e1,否則具有值e2。類似地,如果b具有值“真”,則命令cond(b,P1,P2)等于命令P1,否則等于命令P2。命題聯(lián)結(jié)詞(propositional connective)、、具有它們通常的意義。
除了獲得、釋放、消耗和再循環(huán)注釋之外,在一個(gè)實(shí)施例中,還使用命令available(A,e)。在執(zhí)行期間忽略該命令,但該命令用作用于檢查過(guò)程的規(guī)定。程序員可以使用該命令來(lái)聲明A在給定點(diǎn)處為真并且至少e個(gè)資源單元已經(jīng)被保留但尚未使用。作為檢查過(guò)程的一部分,靜態(tài)地檢查該聲明。
同樣要注意,利用不變量(A,e)來(lái)注釋循環(huán)命令。在靜態(tài)檢查期間,驗(yàn)證謂詞A以確定它是否成立以及在執(zhí)行循環(huán)命令之前是否存在至少e個(gè)資源單元可用。為了簡(jiǎn)化靜態(tài)檢查器的任務(wù),不變量被限制為布爾表達(dá)式的邏輯乘積,隱含(implication)的左側(cè)被類似地限制為謂詞。
更具體地,下面給出表達(dá)式和命令的意義,并且按照這種編程語(yǔ)言結(jié)構(gòu)的操作規(guī)范的公知方法,明確說(shuō)明執(zhí)行會(huì)失敗的精確方式。例如,參見(jiàn)J.C.Mitchell,F(xiàn)oundations for Programming Language,MITPress,1996,進(jìn)一步解釋本描述中使用的標(biāo)準(zhǔn)符號(hào)。執(zhí)行狀態(tài)是將變量名稱映射到整數(shù)值的環(huán)境σ和表示可用資源量的自然數(shù)n的<σ、n>對(duì)。針對(duì)環(huán)境σ中的整數(shù)表達(dá)式e寫出表達(dá)式 并且針對(duì)環(huán)境σ中的布爾表達(dá)式b的值寫出 例如, 其它情況的定義是簡(jiǎn)明的。符號(hào)σ[x=n]表示除x被設(shè)置為n之外與σ相同的環(huán)境。
文中利用語(yǔ)言給出的基本模塊是安全條件產(chǎn)生器。在一個(gè)實(shí)施例中,安全條件產(chǎn)生器與證明檢查器組合在一起以形成驗(yàn)證器。驗(yàn)證器檢查程序具有足夠的獲得操作以應(yīng)付所有的消耗注釋,從而指示出該程序不會(huì)使用比其已經(jīng)保留的資源更多的資源。在一個(gè)實(shí)施例中,驗(yàn)證器也考慮釋放和再循環(huán)操作所釋放的資源。
在一個(gè)實(shí)施例中,驗(yàn)證器是代碼消費(fèi)者的可信計(jì)算基(TCB)的一部分。它可以是最常用的驗(yàn)證器,因?yàn)樗a(chǎn)生最弱的生成者代碼必須滿足的條件以便在代碼消費(fèi)者處確保資源使用率安全。同樣地,驗(yàn)證器對(duì)于用于注釋生成者代碼的方法也是不明確的。
可以按照源或二進(jìn)制形式構(gòu)造驗(yàn)證器,使其可以分別取源代碼或二進(jìn)制代碼作為輸入。盡管此處檢查源代碼形式,二進(jìn)制形式同樣易于構(gòu)造。在一個(gè)實(shí)施例中,代碼生成者僅將二進(jìn)制代碼發(fā)送到代碼消費(fèi)者。
可以按照多種方式將可信驗(yàn)證器集成到代碼注釋和產(chǎn)生過(guò)程中??梢杂纱a消費(fèi)者或代碼生成者或兩者來(lái)執(zhí)行代碼注釋。可以由任意一方手動(dòng)地編輯注釋的結(jié)果。這是可能的,因?yàn)轵?yàn)證器與所使用的注釋方法的選擇無(wú)關(guān)。
圖8演示了代碼生成者執(zhí)行注釋(與代碼產(chǎn)生一起)以及消費(fèi)者執(zhí)行驗(yàn)證(與執(zhí)行一起)。在這種情況下,代碼生成者運(yùn)行資源注釋器,并且代碼消費(fèi)者運(yùn)行二進(jìn)制驗(yàn)證器。在一個(gè)實(shí)施例中,驗(yàn)證器是TCB的一部分,但是注釋器不是。這種分離使代碼生成者可以通過(guò)可能使用少于自動(dòng)注釋器插入的保留來(lái)改善代碼。驗(yàn)證器提供保證,而可以針對(duì)效率來(lái)優(yōu)化注釋過(guò)程。
圖9演示了生成者和驗(yàn)證器之間的基本組件的另一種可能的分離。參考圖9,消費(fèi)者注釋代碼,并運(yùn)行二進(jìn)制驗(yàn)證器。驗(yàn)證器是TCB的一部分,而注釋器可以是也可以不是TCB的一部分。
在圖8和9中,按照可選的方式,消費(fèi)者可以包括通用計(jì)算機(jī)系統(tǒng)、專用機(jī)器、移動(dòng)設(shè)備(例如蜂窩或其它便攜式電話)等。
示范性的驗(yàn)證器圖10是驗(yàn)證器的一個(gè)實(shí)施例的方框圖。參考圖10,驗(yàn)證器1000包括安全條件產(chǎn)生器1001,它計(jì)算程序的安全條件(SC);以及證明器1002,它實(shí)際證明SC。
關(guān)于安全,按照關(guān)系<c,σ,n>⇓R]]>定義的語(yǔ)言的操作語(yǔ)義,表示以狀態(tài)<σ,n>開(kāi)始的c的評(píng)價(jià)終止于結(jié)果R。如果不存在R使得<c,σ,n>⇓R,]]>則將表達(dá)式寫成 結(jié)果R可以是以下類型的數(shù)值之一。如果命令正常終止,則R是新?tīng)顟B(tài)<σ′,n′>。如果保留請(qǐng)求失敗,則R是錯(cuò)誤ReservationFailed或錯(cuò)誤ReleaseFailed。如果程序試圖使用多于可用的資源,則R是錯(cuò)誤QuotaExceeded。如果程序不滿足特定注釋,則R是錯(cuò)誤InvFailure。安全屬性嚴(yán)密地規(guī)定了QuotaExceeded和InvFailure錯(cuò)誤不會(huì)發(fā)生。
圖11、12和13分別示出了排序和分配、條件和循環(huán)以及保留的操作語(yǔ)義。
注意,操作語(yǔ)義還確保程序滿足其伴隨的注釋,否則產(chǎn)生錯(cuò)誤InvFailure。因?yàn)榘踩某绦驈牟划a(chǎn)生InvFailure異常,這些附加規(guī)則沒(méi)有運(yùn)行時(shí)間開(kāi)銷。如果有足夠的資源可用,消耗(釋放)命令正常地終止消耗(釋放)一些可用資源,否則產(chǎn)生QuotaExceeded錯(cuò)誤。在一個(gè)實(shí)施例中,消耗命令不對(duì)資源執(zhí)行任何檢查。獲得命令增加可用資源的量或產(chǎn)生ReservationFailed錯(cuò)誤。按照這種形式,假定獲得操作是非確定性的。實(shí)際上,其行為由操作系統(tǒng)確定。再循環(huán)命令將先前使用的一些量的資源釋放回靜態(tài)池。
使用這種評(píng)價(jià)符號(hào),可以規(guī)定希望的安全策略。如果 如果 ReservationFailed或ReleaseFailed、或?qū)τ谝恍顟B(tài)<σ,n>如果<c,σ,n>⇓<σ′,n′>,]]>則命令c在狀態(tài)<σ,n>中是安全的。即,QuotaExceeded和InvFailure錯(cuò)誤不會(huì)發(fā)生。因此,安全命令可以一直運(yùn)行、終止于保留失敗或正常地終止。
關(guān)于可靠性(soundness),給定命令c,計(jì)算表達(dá)式(P′,e′)=scg(c,(true,0))。為了檢查在狀態(tài)<σ,n>中執(zhí)行程序是否是安全的,驗(yàn)證表達(dá)式σ|=P′e′≤n。該條件確保如果在n個(gè)資源單元可用的狀態(tài)σ中執(zhí)行命令c,c將不會(huì)耗盡資源。如果c實(shí)際使用資源,它在使用資源之前保留這些資源。如以下所討論的,該驗(yàn)證過(guò)程是可靠的。
表達(dá)式σ|=P指示謂詞P保持在狀態(tài)σ中。Recall P是關(guān)于由狀態(tài)σ給出數(shù)值的變量的謂詞,其使得表達(dá)式σ|=P按照本領(lǐng)域的公知方式由命題聯(lián)結(jié)詞的歸納所限定。主要的可靠性引理規(guī)定如下引理1對(duì)于所有的命令c、謂詞P0和P1、表達(dá)式e0和e1、狀態(tài)<σ0,n0>以及結(jié)果R,如果(P0,e0)=scg(c,(P1,e1))σ0|=P0e0≤n0n0≥0則1. 或2. ReservationFailed或ReleaseFailed,或3.<c,σ0,n0>⇓<σ1,n1>,]]>在這種情況下,σ1|=P1e1≤n1n1≥0。
本質(zhì)上,引理確保按照安全策略所需,永遠(yuǎn)不會(huì)發(fā)生QuotaExceeded和InvFailure錯(cuò)誤。
證明按照關(guān)于<c,σ0,n0>⇓R]]>的推導(dǎo)的結(jié)構(gòu)歸納。
因此,形式地定義安全,并且表明安全條件產(chǎn)生器是可靠的。即,如果滿足安全條件,則程序是安全的。
在一個(gè)實(shí)施例中,安全條件產(chǎn)生器還是最佳的。更具體地,命令c和狀態(tài)<σ,n>的安全條件確保如果在n個(gè)資源單元可用的狀態(tài)σ中執(zhí)行命令c,c將不會(huì)耗盡資源。如下所示,安全條件產(chǎn)生器是最佳的,因?yàn)樗峁┝诉壿嬌鲜撬邪踩疤嶂凶畈豢赡艿臈l件,定義如下。
定義1給定命令c和資源狀態(tài)謂詞(P,e),如果下面內(nèi)容成立,表達(dá)式(P′,e′)是c和謂詞(P,e)的最弱的前提1.(P′,e′)是c和(P,e)的安全前提,即∀σ,π.<σ,π>|=(P′,e′)⇒<c,σ,π>⇓|=(P,e).]]>
2.(P′,e′)是所有安全前提中最弱的前提,即∀(P1,e1).[∀σ,π.<σ,π>|=(P1,e1)⇒<c,σ,π>⇓|=(P,e)]]]>(P1,e1)≡>(P′,e′)]]>其中,表達(dá)式(P,e)≡>(P′,e′)被定義為PP′e≥e′,以及<σ,π>|=(P,e)被定義為σ|=Pπ≥‖e‖σπ≥0。符號(hào) 表示命令c終止于新的狀態(tài)或僅引起錯(cuò)誤ReservationFailed或ReleaseFailed。具體地,它不會(huì)引起錯(cuò)誤InvFailure和QuotaExceeded。
引理2對(duì)于所有的命令c和資源狀態(tài)謂詞(P,e),scg(c,(P,e))是c和謂詞(P,e)的最弱的前提。
因此,該安全條件產(chǎn)生器是最佳的,因?yàn)楫a(chǎn)生的安全條件捕獲滿足注釋且資源使用率安全的所有程序。
安全條件產(chǎn)生器在一個(gè)實(shí)施例中,驗(yàn)證器使用Dijkstra的最弱前提微積分(weakestprecondition calculus)的變量(Edsger Dijkstra的A Discipline ofProgramming,Prentice-Hall,1976)。對(duì)于每一個(gè)程序點(diǎn),計(jì)算不變量(A,e),使得在所有執(zhí)行中的該點(diǎn)處,滿足A并且至少e個(gè)資源單元可用。在一個(gè)實(shí)施例中,從在程序執(zhí)行結(jié)束處成立的不變量開(kāi)始計(jì)算這些不變量。
圖14是安全條件產(chǎn)生器的代碼的一個(gè)實(shí)施例,以及圖15是安全條件產(chǎn)生器(scg)的一個(gè)實(shí)施例的操作的流程圖。在文中所述的多種情況下,以代碼和流程圖的形式表示一個(gè)函數(shù)。在所有的情況下,兩種形式是完全相同的。函數(shù)scg(c,(P,e))將在c的結(jié)束處成立的不變量(P,e)映射到在c的開(kāi)始處成立的不變量(P′,e′)。scg由命令語(yǔ)義上的遞歸定義。在圖15和17的流程圖中,x由fa(x)表示。
示范性的證明器在一個(gè)實(shí)施例中,安全條件產(chǎn)生器與證明構(gòu)造器組合在一起形成證明器。證明器被用于證明安全條件。在一個(gè)實(shí)施例中,謂詞的語(yǔ)法將隱含的左側(cè)限制為注釋,但不是所有的謂詞。注釋是布爾表達(dá)式的邏輯乘,布爾表達(dá)式是整數(shù)表達(dá)式之間的相等或不等。
定義遵守該限制。在一個(gè)實(shí)施例中,在隱含左側(cè)的所有公式都是從循環(huán)不變量、前提和后置條件以及可用的條款中產(chǎn)生的。
因此,在當(dāng)且僅當(dāng)AP有效時(shí)prove(A,P)成立的情況下使用簡(jiǎn)單的定理證明器證明a×p→Bool。有效表示對(duì)于全局變量和全量(universal quantification)的規(guī)則所引入的常數(shù)的所有值,該公式都為真。最初,在一個(gè)實(shí)施例中,調(diào)用prove(true,SCf)來(lái)證明每一個(gè)函數(shù)f的安全條件SCf。圖16是證明器的代碼的一個(gè)實(shí)施例,而圖17是描述了該證明器的等效流程圖。
為了證明AP,證明遞歸地分解P,直到P達(dá)到布爾表達(dá)式b為止。然后,使用可滿足性過(guò)程sat來(lái)檢查Ab是否有效。通常,當(dāng)且僅當(dāng)未能滿足其否定 時(shí),Ab有效。因此,表達(dá)式sat調(diào)用(可能否定的)布爾表達(dá)式的邏輯乘。由于證明分解P使用可逆準(zhǔn)則,當(dāng)且僅當(dāng)sat可靠且完備時(shí),證明是可靠且完備的。
可滿足性過(guò)程的選擇取決于布爾表達(dá)式的形式。如果不等式具有形式x≥y+c或x≥c(其中c是常數(shù),并且x和y是變量或未解釋的項(xiàng)),可以使用基于循環(huán)殘留的算法(T.H.Cormen,C.E.Leiserson,和R.L.Rivest,An Introduction to Algorithms,The MIT Press,1998,539頁(yè))。Shostak將該算法歸納為任意不等式(Robert Shostak,Deciding LinearInequalities by Computing Loop Residue,Journal of the ACM,28(4)769-779,October 1981)。另一個(gè)著名的算法是Sup-Inf(W.W.Bledsoe,The sup-Inf Method in Presurger Arithmetic,Technical Report,Universityof Texas Math Department,December 1974)和Simplex。
如果布爾表達(dá)式包含除了常數(shù)的加、減和乘之外的函數(shù),則不解釋它們。即,僅做出對(duì)于任意函數(shù)集合可靠的隱含。即,僅假定函數(shù)將相等的自變量映射到相等的結(jié)果。Sat和prove對(duì)于該系統(tǒng)也是完備的,因?yàn)樗鼈冏龀鏊羞@種隱含。然而,對(duì)于程序中使用的特定函數(shù),它們是不完備的。由于該限制,程序員可以希望將注釋限制為sat可以處理的形式。
存在兩個(gè)著名的處理線性不等式和未解釋函數(shù)的可滿足性過(guò)程。一個(gè)是由于Nelson和Oppen(Greg Nelson,Techniques for ProgramVerification,Technical Report CSL-81-10,Xerox Palo Alto ResearchCenter,1981),并且由Stanford Pascal Verifier(David Luckham等,Stanford Pascal Verifier User Manual,Technical ReportSTAN-CS-79-731,Department of Computer Science,StanfordUniversity,March 1979)和Extended Static Checker(Greg Nelson,Techniques for Program Verification,Technical report CSL-81-10,XeroxPalo Alto Research Center,1981)(David Detlefs,An Overview of theExtended Static Checking System,In Proceedings of the First FormalMethods in Software Practice Workshop,1996)(David L.Detlefs等,Extended Static Checking,SRC Research Report 159,Compaq SystemsResearch Center,130 Lytton Avenue,Palo Alto,December 1998)實(shí)現(xiàn)。另一個(gè)是由于Shostak(Robert E.Shostak,Deciding Combinations ofTheories,Journal ofthe ACM,31(1)1-12,January 1984),并且在原型驗(yàn)證系統(tǒng)(Prototype Verification System)(PVS)(S.Owre et al.,PVSA Prototype Verification System,In Deepak Kapur,editor,11thInternational Conference on Automated Deduction(CADE),volume 607of Lecture Notes in Artificial Intelligence,pp.748-752,Saratoga,NY,June 1992,Springer-Verlag)中實(shí)現(xiàn)。
圖18示出了用while命令寫出的小循環(huán)。在這種情況下,程序員利用不變量手動(dòng)地注釋循環(huán)。圖19示出了該示例的安全條件。為了推導(dǎo)出它,表達(dá)式計(jì)算scg(c,true,0)。在一些簡(jiǎn)化之后,可以表明該安全條件是有效的。
示范性的移動(dòng)電話圖20是蜂窩電話的一個(gè)實(shí)施例的方框圖。
參考圖20,蜂窩電話2010包括天線2011、射頻收發(fā)機(jī)(RF單元)2012、調(diào)制解調(diào)器2013、信號(hào)處理單元2014、控制單元2015、外部接口單元(外部I/F)2016、揚(yáng)聲器(SP)2017、麥克風(fēng)(MIC)2018、顯示單元2019、操作單元2020以及存儲(chǔ)器2021。
外部終端2030包括外部接口(外部I/F)2031、CPU(中央處理單元)2032、顯示單元2033、鍵盤2034、存儲(chǔ)器2035、硬盤2036以及CD-ROM驅(qū)動(dòng)器2037。
CPU 2032與蜂窩電話2010的存儲(chǔ)器協(xié)作,用以執(zhí)行上述操作。示范性的計(jì)算機(jī)系統(tǒng)圖21是示范性的計(jì)算機(jī)系統(tǒng)的方框圖,該系統(tǒng)可以執(zhí)行文中所述的一個(gè)或多個(gè)操作。注意,這些框或這些框的子集可以集成到例如蜂窩電話的設(shè)備中,用以執(zhí)行文中所述的技術(shù)。
參考圖21,計(jì)算機(jī)系統(tǒng)2100可以包括示范性的客戶端或服務(wù)器計(jì)算機(jī)系統(tǒng)。計(jì)算機(jī)系統(tǒng)2100包括通信機(jī)構(gòu)或總線2111,用于通信信息;以及處理器2112,與總線2111相連,用于處理信息。處理器2112包括微處理器,但是不局限于微處理器,可以包括例如PentiumTM、PowerPCTM、AlphaTM等。
系統(tǒng)2100還包括與總線2111相連的隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)設(shè)備2104(稱為主存儲(chǔ)器),用于存儲(chǔ)要由處理器2112執(zhí)行的信息和指令。主存儲(chǔ)器2140還被用于在處理器2112的指令執(zhí)行期間臨時(shí)存儲(chǔ)變量或其它中間信息。
計(jì)算機(jī)系統(tǒng)2100還包括與總線2111相連的只讀存儲(chǔ)器(ROM)和/或其它靜態(tài)存儲(chǔ)設(shè)備2106,用于存儲(chǔ)處理器2112的靜態(tài)信息和指令;以及數(shù)據(jù)存儲(chǔ)設(shè)備2107,例如磁盤或光盤以及其相應(yīng)的盤驅(qū)動(dòng)器。數(shù)據(jù)存儲(chǔ)設(shè)備2107與總線2111相連,用于存儲(chǔ)信息和指令。
計(jì)算機(jī)系統(tǒng)2100還可以與例如陰極射線管(CRT)或液晶顯示器(LCD)的顯示設(shè)備2121相連,顯示設(shè)備2121與總線2111相連,用于向計(jì)算機(jī)用戶顯示信息。字母數(shù)字輸入設(shè)備2122(包括字母數(shù)字和其它鍵)也可以與總線2111相連,用于將信息和命令選擇通信給處理器2112。附加的用戶輸入設(shè)備是與總線2111相連的光標(biāo)控制2123,例如鼠標(biāo)、軌跡球、軌跡板、手寫筆或光標(biāo)方向鍵,用于將方向信息和命令選擇通信給處理器2112,并且用于控制光標(biāo)在顯示器2121上的移動(dòng)。
可以與總線2111相連的另一個(gè)設(shè)備是硬拷貝設(shè)備2124,可以用于在例如紙、膠片或類似介質(zhì)的介質(zhì)上打印指令、數(shù)據(jù)或其它信息。此外,例如揚(yáng)聲器和/或麥克風(fēng)之類的聲音記錄和回放設(shè)備可以可選地與總線2111相連,用于與計(jì)算機(jī)系統(tǒng)2100以音頻相接口??梢耘c總線2111相連的另一個(gè)設(shè)備是有線/無(wú)線通信能力2125,用于與電話或手持掌上設(shè)備進(jìn)行通信。
注意,可以在本發(fā)明中使用系統(tǒng)2100的任意或所有組件以及相關(guān)硬件。然而,要認(rèn)識(shí)到,計(jì)算機(jī)系統(tǒng)的其它配置可以包括一些或所有這些設(shè)備。
盡管在閱讀了上述說(shuō)明之后,本發(fā)明的多種變化和修改毫無(wú)疑問(wèn)地對(duì)于本領(lǐng)域的普通技術(shù)人員是顯而易見(jiàn)的,應(yīng)該理解到,絕不應(yīng)該將作為演示而示出且描述的任意特定實(shí)施例當(dāng)作限制。因此,各個(gè)實(shí)施例的細(xì)節(jié)將不會(huì)限制僅在其中列舉了有關(guān)發(fā)明本質(zhì)的這些特征的權(quán)利要求的范圍。
權(quán)利要求
1.一種方法,包括接收程序代碼;以及靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息,程序代碼中的所述一個(gè)或多個(gè)動(dòng)態(tài)檢查用于檢查程序代碼中的操作。
2.根據(jù)權(quán)利要求1所述的方法,其中,至少一個(gè)所述動(dòng)態(tài)檢查確定操作是否不安全。
3.根據(jù)權(quán)利要求1所述的方法,其中,在運(yùn)行時(shí)間之前執(zhí)行靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
4.根據(jù)權(quán)利要求1所述的方法,其中,在運(yùn)行時(shí)間之前執(zhí)行靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息是用于檢查安全性。
5.根據(jù)權(quán)利要求1所述的方法,其中,所述一個(gè)或多個(gè)動(dòng)態(tài)檢查中的至少一個(gè)包括用于規(guī)定資源保留的一個(gè)或多個(gè)注釋。
6.根據(jù)權(quán)利要求5所述的方法,其中,資源保留與安全地執(zhí)行程序代碼相關(guān)。
7.根據(jù)權(quán)利要求1所述的方法,其中,靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息包括檢查程序代碼是否在運(yùn)行時(shí)間期間使用了多于在執(zhí)行之前程序代碼已經(jīng)保留的一個(gè)或多個(gè)資源的資源。
8.根據(jù)權(quán)利要求1所述的方法,其中,靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息的步驟包括檢查程序代碼是否使用多于預(yù)定資源量的資源。
9.根據(jù)權(quán)利要求1所述的方法,其中,靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息包括靜態(tài)地檢查程序代碼中用于保留一個(gè)或多個(gè)資源的一個(gè)或多個(gè)第一集合操作,以確定由所述一個(gè)或多個(gè)操作保留的一個(gè)或多個(gè)資源是否足以應(yīng)付在程序代碼中消耗資源的所有運(yùn)行時(shí)間操作。
10.根據(jù)權(quán)利要求1所述的方法,還包括將一個(gè)或多個(gè)動(dòng)態(tài)檢查添加到程序代碼中。
11.根據(jù)權(quán)利要求1所述的方法,還包括將一個(gè)或多個(gè)注釋添加到程序代碼中,所述一個(gè)或多個(gè)注釋中的至少一個(gè)包括用于保留一部分程序代碼要使用的資源的操作。
12.根據(jù)權(quán)利要求11所述的方法,還包括選擇至少一個(gè)靜態(tài)檢查和至少一個(gè)動(dòng)態(tài)檢查的組合;以及將注釋添加到程序代碼,用以表示狀態(tài)和動(dòng)態(tài)檢查。
13.根據(jù)權(quán)利要求1所述的方法,還包括通過(guò)在運(yùn)行時(shí)間期間調(diào)用動(dòng)態(tài)檢查,執(zhí)行程序代碼的動(dòng)態(tài)檢查。
14.根據(jù)權(quán)利要求13所述的方法,還包括響應(yīng)確定資源使用率超出限度,限制程序代碼的資源使用率。
15.根據(jù)權(quán)利要求14所述的方法,其中,限制程序代碼的資源使用率包括暫停程序代碼的執(zhí)行。
16.根據(jù)權(quán)利要求13所述的方法,還包括響應(yīng)確定資源使用率超出限度,產(chǎn)生異常。
17.根據(jù)權(quán)利要求13所述的方法,還包括響應(yīng)確定資源使用率超出限度,產(chǎn)生中斷。
18.根據(jù)權(quán)利要求1所述的方法,其中,所述一個(gè)或多個(gè)動(dòng)態(tài)檢查中的至少一個(gè)是用于檢查資源的使用率。
19.根據(jù)權(quán)利要求18所述的方法,其中,資源包括物理資源。
20.根據(jù)權(quán)利要求19所述的方法,其中,物理資源包括從由以下組成的組中選出的一個(gè)中央處理單元(CPU)指令數(shù)、存儲(chǔ)空間、盤空間、網(wǎng)絡(luò)帶寬、設(shè)備硬件操作以及設(shè)備軟件操作。
21.根據(jù)權(quán)利要求18所述的方法,其中,資源包括虛擬資源。
22.根據(jù)權(quán)利要求21所述的方法,其中,虛擬資源包括從由以下組成的組中選出的一個(gè)文件句柄、進(jìn)程以及數(shù)據(jù)庫(kù)連接。
23.一種制造物品,具有一個(gè)或多個(gè)用于存儲(chǔ)指令的可記錄介質(zhì),當(dāng)由系統(tǒng)執(zhí)行時(shí),所述物品使系統(tǒng)執(zhí)行一種方法,所述方法包括接收程序代碼;以及靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息,程序代碼中所述一個(gè)或多個(gè)動(dòng)態(tài)檢查用于檢查程序代碼中的操作。
24.根據(jù)權(quán)利要求23所述的制造物品,其中,至少一個(gè)所述動(dòng)態(tài)檢查確定操作是否不安全。
25.根據(jù)權(quán)利要求23所述的制造物品,其中,在運(yùn)行時(shí)間之前執(zhí)行靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
26.根據(jù)權(quán)利要求23所述的制造物品,其中,在運(yùn)行時(shí)間之前靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息是用于檢查安全性。
27.根據(jù)權(quán)利要求23所述的制造物品,其中,所述一個(gè)或多個(gè)動(dòng)態(tài)檢查中的至少一個(gè)包括用于規(guī)定資源保留的一個(gè)或多個(gè)注釋。
28.根據(jù)權(quán)利要求27所述的制造物品,其中,資源保留與安全地執(zhí)行程序代碼相關(guān)。
29.根據(jù)權(quán)利要求23所述的制造物品,其中,靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息的步驟包括檢查程序代碼是否在運(yùn)行時(shí)間期間使用了多于在執(zhí)行之前程序代碼已經(jīng)保留的一個(gè)或多個(gè)資源的資源。
30.根據(jù)權(quán)利要求23所述的制造物品,其中,靜態(tài)地驗(yàn)證關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息包括檢查程序代碼是否使用了多于預(yù)定資源量的資源。
31.根據(jù)權(quán)利要求23所述的制造物品,其中,靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息包括靜態(tài)地檢查程序代碼中用于保留一個(gè)或多個(gè)資源的一個(gè)或多個(gè)第一集合操作,以確定由所述一個(gè)或多個(gè)操作保留的一個(gè)或多個(gè)資源是否足以應(yīng)付程序代碼中消耗資源的所有運(yùn)行時(shí)間操作。
32.根據(jù)權(quán)利要求23所述的制造物品,其中,所述方法還包括將一個(gè)或多個(gè)動(dòng)態(tài)檢查添加到程序代碼中。
33.根據(jù)權(quán)利要求23所述的制造物品,其中,所述方法還包括將一個(gè)或多個(gè)注釋添加到程序代碼中,所述一個(gè)或多個(gè)注釋中的至少一個(gè)包括用于保留一部分程序代碼要使用的資源的操作。
34.根據(jù)權(quán)利要求33所述的制造物品,其中,所述方法還包括選擇至少一個(gè)靜態(tài)檢查和至少一個(gè)動(dòng)態(tài)檢查的組合;以及將注釋添加到程序代碼,以表示狀態(tài)和動(dòng)態(tài)檢查。
35.根據(jù)權(quán)利要求23所述的制造物品,其中,所述方法還包括通過(guò)在運(yùn)行時(shí)間期間調(diào)用動(dòng)態(tài)檢查,執(zhí)行程序代碼的動(dòng)態(tài)檢查。
36.根據(jù)權(quán)利要求35所述的制造物品,其中,所述方法還包括響應(yīng)確定資源使用率超出限度,限制程序代碼的資源使用率。
37.根據(jù)權(quán)利要求36所述的制造物品,其中,限制程序代碼的資源使用率包括暫停程序代碼的執(zhí)行。
38.根據(jù)權(quán)利要求35所述的制造物品,其中,所述方法還包括響應(yīng)確定資源使用率超出限度,產(chǎn)生異常。
39.根據(jù)權(quán)利要求35所述的制造物品,其中,所述方法還包括響應(yīng)確定資源使用率超出限度,產(chǎn)生中斷。
40.根據(jù)權(quán)利要求23所述的制造物品,其中,所述一個(gè)或多個(gè)動(dòng)態(tài)檢查中的至少一個(gè)是用于檢查資源的使用率。
41.根據(jù)權(quán)利要求40所述的制造物品,其中,資源包括物理資源。
42.根據(jù)權(quán)利要求41所述的制造物品,其中,物理資源包括從由以下組成的組中選出的一個(gè)中央處理單元(CPU)指令數(shù)、存儲(chǔ)空間、盤空間、網(wǎng)絡(luò)帶寬、設(shè)備硬件操作以及設(shè)備軟件操作。
43.根據(jù)權(quán)利要求40所述的制造物品,其中,資源包括虛擬資源。
44.根據(jù)權(quán)利要求43所述的制造物品,其中,虛擬資源包括從由以下組成的組中選出的一個(gè)文件句柄以及進(jìn)程。
45.一種方法,包括靜態(tài)地確定資源表達(dá)式;以及將一個(gè)或多個(gè)注釋添加到程序代碼,能夠檢查在執(zhí)行期間程序代碼對(duì)資源的使用率是否處于限度內(nèi)。
46.根據(jù)權(quán)利要求45所述的方法,其中,由定額設(shè)置限度。
47.一種制造物品,具有一個(gè)或多個(gè)用于存儲(chǔ)指令的可記錄介質(zhì),當(dāng)由系統(tǒng)執(zhí)行時(shí),所述物品使系統(tǒng)執(zhí)行一種方法,該方法包括靜態(tài)地確定資源表達(dá)式;以及將一個(gè)或多個(gè)注釋添加到程序代碼,能夠檢查在執(zhí)行期間程序代碼對(duì)資源的使用率是否處于限度內(nèi)。
48.一種方法,包括接收具有注釋的程序代碼;以及在執(zhí)行程序代碼的同時(shí),通過(guò)檢查獲得的資源是否少于定額,來(lái)檢查資源使用率。
49.根據(jù)權(quán)利要求48所述的方法,其中,在執(zhí)行之前靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
50.根據(jù)權(quán)利要求48所述的方法,其中,在程序代碼中與所述一個(gè)或多個(gè)動(dòng)態(tài)檢查的每一個(gè)相關(guān)聯(lián)的操作的執(zhí)行之前,靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息。
51.根據(jù)權(quán)利要求48所述的方法,其中,定額來(lái)自操作系統(tǒng)。
52.根據(jù)權(quán)利要求48所述的方法,其中,定額來(lái)自策略。
53.根據(jù)權(quán)利要求48所述的方法,其中,策略規(guī)定了程序代碼被允許使用的一個(gè)或多個(gè)資源以及對(duì)于所述一個(gè)或多個(gè)資源的每一個(gè)的使用率限度,該限度指示了可以由資源代碼使用的所述一個(gè)或多個(gè)資源的每一個(gè)的量。
54.根據(jù)權(quán)利要求48所述的方法,其中,至少一個(gè)所述一個(gè)或多個(gè)資源的使用率限度是上限。
55.根據(jù)權(quán)利要求48所述的方法,其中,至少一個(gè)所述一個(gè)或多個(gè)資源的使用率限度是下限。
56.根據(jù)權(quán)利要求48所述的方法,其中,至少一個(gè)所述一個(gè)或多個(gè)資源的使用率是等級(jí)(rate)。
57.一種制造物品,具有一個(gè)或多個(gè)用于存儲(chǔ)指令的可記錄介質(zhì),當(dāng)由系統(tǒng)執(zhí)行時(shí),所述物品使系統(tǒng)執(zhí)行一種方法,該方法包括下載具有注釋的程序代碼;以及在執(zhí)行程序代碼的同時(shí),通過(guò)檢查獲得的資源是否少于定額,來(lái)檢查資源使用率。
58.一種方法,包括接收在運(yùn)行時(shí)間期間動(dòng)態(tài)地請(qǐng)求使用一個(gè)或多個(gè)資源的程序代碼;以及靜態(tài)地檢查程序代碼,以確定程序代碼在運(yùn)行時(shí)間期間僅使用授權(quán)的資源。
59.一種制造物品,具有一個(gè)或多個(gè)用于存儲(chǔ)指令的可記錄介質(zhì),當(dāng)由系統(tǒng)執(zhí)行時(shí),所述物品使系統(tǒng)執(zhí)行一種方法,該方法包括接收在運(yùn)行時(shí)間期間動(dòng)態(tài)地請(qǐng)求使用一個(gè)或多個(gè)資源的程序代碼;以及靜態(tài)地檢查程序代碼,以確定程序代碼在運(yùn)行時(shí)間期間僅使用授權(quán)的資源。
60.一種體系結(jié)構(gòu),包括驗(yàn)證器,用于檢查程序代碼在執(zhí)行期間是否使用多于在執(zhí)行之前程序代碼已經(jīng)保留的一個(gè)或多個(gè)資源的資源,所述驗(yàn)證器包括安全條件產(chǎn)生器,用于計(jì)算程序代碼的安全條件;以及證明檢查器,用于檢查安全條件是否有效。
61.根據(jù)權(quán)利要求60所述的體系結(jié)構(gòu),其中,驗(yàn)證器部分地根據(jù)程序代碼中的資源消耗來(lái)執(zhí)行檢查。
62.根據(jù)權(quán)利要求61所述的體系結(jié)構(gòu),其中,由程序代碼中的操作釋放的資源包括由操作釋放的一個(gè)或多個(gè)資源。
63.根據(jù)權(quán)利要求61所述的體系結(jié)構(gòu),其中,由程序代碼中的操作適當(dāng)?shù)馁Y源包括由操作再循環(huán)的一個(gè)或多個(gè)資源。
64.根據(jù)權(quán)利要求60所述的體系結(jié)構(gòu),其中,當(dāng)安全條件捕獲滿足注釋并且在資源使用率方面安全的所有程序時(shí),安全條件是最佳的。
65.一種體系結(jié)構(gòu),包括證明器,包括安全條件產(chǎn)生器,用于計(jì)算程序代碼的安全條件,以及證明構(gòu)造器。
全文摘要
一種用于對(duì)程序代碼執(zhí)行檢查的方法和設(shè)備。在一個(gè)實(shí)施例中,該方法包括接收程序代碼并靜態(tài)地驗(yàn)證程序代碼中關(guān)于一個(gè)或多個(gè)動(dòng)態(tài)檢查的信息,程序代碼中所述一個(gè)或多個(gè)動(dòng)態(tài)檢查用于檢查程序代碼中的操作。
文檔編號(hào)G06F11/36GK1898651SQ200480038355
公開(kāi)日2007年1月17日 申請(qǐng)日期2004年12月22日 優(yōu)先權(quán)日2003年12月23日
發(fā)明者阿賈伊·錢德?tīng)? 納伊姆·伊斯蘭, 戴維·埃斯皮諾薩, 喬治·尼古拉, 彼得·李 申請(qǐng)人:株式會(huì)社Ntt都科摩