本發(fā)明涉及經(jīng)認(rèn)證的控制堆棧,且更特定地涉及用于產(chǎn)生控制堆棧的技術(shù)。
背景技術(shù):
計(jì)算機(jī)軟件可易受變更所述軟件的操作的攻擊。舉例來說,諸如軟件蠕蟲或病毒的惡意探索(如此命名是因?yàn)槠鋹阂馓剿鬈浖械穆┒?可變更現(xiàn)有軟件代碼、插入新代碼,及/或使現(xiàn)有代碼的執(zhí)行次序從原始預(yù)期次序變更以誘發(fā)并非如所預(yù)期的原始代碼的部分的操作。在沒有關(guān)于軟件中的可接受入口點(diǎn)的任何管制的情況下,惡意探索可將執(zhí)行導(dǎo)向到軟件中的任何點(diǎn),從而促進(jìn)非預(yù)期軟件執(zhí)行序列,這是因?yàn)檎麄€(gè)軟件代碼可供惡意探索使用。
處理器架構(gòu)通常包含用于數(shù)據(jù)及控制流程兩者的堆棧。堆棧含有跟蹤針對通過程序的調(diào)用路徑中的每一調(diào)用的激活記錄的堆??蚣?。激活記錄通常含有由每一函數(shù)(本地變量、參數(shù)等等)使用的數(shù)據(jù)以及控制信息(返回地址、堆棧指針等等),所述數(shù)據(jù)以及控制信息用以在調(diào)用及返回期間參考數(shù)據(jù)及/或維護(hù)程序控制流程。具體地說,返回地址在函數(shù)調(diào)用期間被推送到堆棧上,且被調(diào)用函數(shù)將含有其本地變量的堆??蚣芊峙湓诎魏伪镜?cái)?shù)據(jù)緩沖器的堆棧上。實(shí)施故障及未經(jīng)驗(yàn)證輸入可造成程序溢流堆棧上的緩沖器且改寫控制數(shù)據(jù)(例如,返回地址、框架指針)。這又允許通過操縱外部輸入而劫持程序的控制流程。
為了保護(hù)免受此類堆棧溢出攻擊,已提議若干緩解操作。一種技術(shù)為軟件堆棧保護(hù)(ssp),其中由編譯程序?qū)⒎雷o(hù)值(或堆棧密探)插入在緊接于返回地址的堆棧上,且在函數(shù)返回之前驗(yàn)證防護(hù)值。此方法使用跨越針對以此方式所保護(hù)的每一程序的生成周期的改變?,F(xiàn)有軟件被生成有支持堆棧密探的編譯程序。為了使密探值對于每一運(yùn)行而言為隨機(jī)的,提供對隨機(jī)數(shù)產(chǎn)生器的存取。提供錯(cuò)誤恢復(fù)處理程序以允許從堆棧溢出攻擊的恢復(fù)。除了針對每一程序所涉及的復(fù)雜度以外,此技術(shù)還具有大小及性能開銷,這是因?yàn)槭艿奖Wo(hù)的每一函數(shù)是用產(chǎn)生密探且執(zhí)行檢查的代碼予以檢測。另一技術(shù)為堆棧重影,其檢測os內(nèi)核陷阱處理程序,所述處理程序在寄存器窗口溢流情形時(shí)被調(diào)用以隨著其寫入到存儲器而保護(hù)應(yīng)用程序返回地址,從而檢查任何惡意改寫。此技術(shù)不需要應(yīng)用程序?qū)蛹墕⒂没虼a大小成本,但依賴于架構(gòu)中的支持寄存器窗口。另一技術(shù)包含將影子堆棧架構(gòu)存儲在存儲器的單獨(dú)受保護(hù)區(qū)域中。或者通過重復(fù)控制信息來維護(hù)影子堆棧。針對所有執(zhí)行線程而分配及管理單獨(dú)存儲器,從而引入復(fù)雜度。
技術(shù)實(shí)現(xiàn)要素:
一種產(chǎn)生控制堆棧的實(shí)例方法包含:響應(yīng)于一或多個(gè)函數(shù)調(diào)用而將多個(gè)控制信息條目寫入到在處理器內(nèi)部的控制堆棧緩沖器中;及響應(yīng)于所述控制堆棧緩沖器已滿且接收到另外函數(shù)調(diào)用而進(jìn)行以下操作:將所述多個(gè)控制信息條目寫入到在所述處理器外部的外部存儲器;及將對應(yīng)于所述另外函數(shù)調(diào)用的另外控制信息條目寫入到所述控制堆棧緩沖器。
此類方法的實(shí)施方案可包含以下特征中的一或多者。所述方法進(jìn)一步包含使用所述多個(gè)控制信息條目中的至少第一控制信息條目及第二控制信息條目來確定認(rèn)證標(biāo)簽。所述方法進(jìn)一步包含將所述認(rèn)證標(biāo)簽的相應(yīng)部分與所述第一控制信息條目及所述第二控制信息條目中的每一者相關(guān)聯(lián)地存儲到所述外部存儲器。所述多個(gè)控制信息條目包含兩個(gè)以上控制信息條目,且其中確定所述認(rèn)證標(biāo)簽包括將函數(shù)應(yīng)用于所述多個(gè)控制信息條目中的全部。所述方法進(jìn)一步包含:使用存儲在所述外部存儲器中的至少所述第一控制信息條目及所述第二控制信息條目來確定認(rèn)證驗(yàn)證程序;確定所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽;及基于所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽而將所述第一控制信息條目從所述外部存儲器寫入到所述控制堆棧緩沖器。
此外或替代地,此類方法的實(shí)施方案可包含以下特征中的一或多者。將所述多個(gè)控制信息條目寫入到所述外部存儲器包含伴隨將所述多個(gè)控制信息條目安置在所述外部存儲器的第一區(qū)域中而將所述多個(gè)控制信息條目寫入到所述外部存儲器,所述外部存儲器的所述第一區(qū)域物理上從存儲對應(yīng)于所述控制信息條目的程序數(shù)據(jù)的所述外部存儲器的第二區(qū)域位移。將所述多個(gè)控制信息條目寫入到所述外部存儲器包含伴隨所述多個(gè)控制信息條目的至少主要部分為寫入在堆??蚣苤械亩褩?蚣芸刂菩畔l目的主要部分的重復(fù)而將所述多個(gè)控制信息條目寫入到所述外部存儲器,且其中所述堆??蚣艽鎯υ谒鐾獠看鎯ζ髦星抑辽僭诒辉紝懭霑r(shí)含有對應(yīng)于所述堆??蚣芸刂菩畔l目的程序數(shù)據(jù)。所述方法進(jìn)一步包含:確定所述多個(gè)控制信息條目的至少所述主要部分匹配于所述堆??蚣芸刂菩畔l目的至少所述主要部分;及基于所述多個(gè)控制信息條目的至少所述主要部分匹配于所述堆??蚣芸刂菩畔l目的至少所述主要部分而將所述多個(gè)控制信息條目從所述外部存儲器寫入到所述控制堆棧緩沖器。
一種實(shí)例計(jì)算系統(tǒng)包含:處理器,其含有控制堆棧緩沖器;及外部存儲器,其在所述處理器外部且以通信方式耦合到所述處理器;其中所述處理器經(jīng)配置以進(jìn)行以下操作:通過將控制信息條目寫入到所述控制堆棧緩沖器中而對函數(shù)調(diào)用作出響應(yīng);對控制框架填充所述控制堆棧緩沖器作出響應(yīng),所述控制框架包括多個(gè)控制信息條目,且通過將所述控制框架寫入到所述外部存儲器且通過將對應(yīng)于另外函數(shù)調(diào)用的另外控制信息條目寫入到所述控制堆棧緩沖器而接收所述另外函數(shù)調(diào)用。
此類計(jì)算系統(tǒng)的實(shí)施方案可包含以下特征中的一或多者。所述處理器經(jīng)進(jìn)一步配置以使用所述多個(gè)控制信息條目中的至少第一控制信息條目及第二控制信息條目來確定認(rèn)證標(biāo)簽。所述處理器經(jīng)進(jìn)一步配置以將所述認(rèn)證標(biāo)簽的相應(yīng)部分與所述第一控制信息條目及所述第二控制信息條目中的每一者相關(guān)聯(lián)地存儲到所述外部存儲器。所述多個(gè)控制信息條目包含兩個(gè)以上控制信息條目,且其中所述處理器經(jīng)配置以通過將函數(shù)應(yīng)用于所述多個(gè)控制信息條目中的全部而確定所述認(rèn)證標(biāo)簽。所述處理器經(jīng)進(jìn)一步配置以進(jìn)行以下操作:使用存儲在所述外部存儲器中的至少所述第一控制信息條目及所述第二控制信息條目來確定認(rèn)證驗(yàn)證程序;確定所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽;及基于所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽而將所述第一控制信息條目從所述外部存儲器寫入到所述控制堆棧緩沖器。
此外或替代地,此類計(jì)算系統(tǒng)的實(shí)施方案可包含以下特征中的一或多者。所述處理器經(jīng)配置以通過形成分裂式堆棧而將所述控制框架寫入到所述外部存儲器,其中所述多個(gè)控制信息條目安置在所述外部存儲器的第一區(qū)域中,所述外部存儲器的所述第一區(qū)域物理上與存儲對應(yīng)于所述控制信息條目的程序數(shù)據(jù)的所述外部存儲器的第二區(qū)域分離。所述處理器經(jīng)配置以通過形成影子堆棧而將所述控制框架寫入到所述外部存儲器,其中所述多個(gè)控制信息條目的至少主要部分為寫入在堆??蚣苤械亩褩?蚣芸刂菩畔l目的主要部分的重復(fù),且其中所述堆??蚣艽鎯υ谒鐾獠看鎯ζ髦星抑辽僭诒辉紝懭霑r(shí)含有對應(yīng)于所述堆??蚣芸刂菩畔l目的程序數(shù)據(jù)。
另一實(shí)例計(jì)算系統(tǒng)包含:用于存儲控制堆棧緩沖器的裝置;用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置;用于通過將控制信息條目寫入到所述控制堆棧緩沖器中而對函數(shù)調(diào)用作出響應(yīng)的裝置;及用于對控制框架填充所述控制堆棧緩沖器作出響應(yīng)的裝置,所述控制框架包括多個(gè)控制信息條目,且通過將所述控制框架寫入到所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置且通過將對應(yīng)于另外函數(shù)調(diào)用的另外控制信息條目寫入到所述控制堆棧緩沖器而接收所述另外函數(shù)調(diào)用。
此類計(jì)算系統(tǒng)的實(shí)施方案可包含以下特征中的一或多者。所述系統(tǒng)進(jìn)一步包含經(jīng)配置以使用所述多個(gè)控制信息條目中的至少第一控制信息條目及第二控制信息條目來確定認(rèn)證標(biāo)簽的認(rèn)證裝置。所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置進(jìn)一步用于與所述第一控制信息條目及所述第二控制信息條目中的每一者相關(guān)聯(lián)地存儲所述認(rèn)證標(biāo)簽的相應(yīng)部分。所述多個(gè)控制信息條目包括兩個(gè)以上控制信息條目,且其中所述認(rèn)證裝置經(jīng)配置以通過將函數(shù)應(yīng)用于所述多個(gè)控制信息條目中的全部而確定所述認(rèn)證標(biāo)簽。所述認(rèn)證裝置經(jīng)進(jìn)一步配置以進(jìn)行以下操作:使用存儲在所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置中的至少所述第一控制信息條目及所述第二控制信息條目來確定認(rèn)證驗(yàn)證程序;及確定所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽;其中所述系統(tǒng)進(jìn)一步包括用于基于所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽而將所述第一控制信息條目從所述存儲裝置寫入到所述控制堆棧緩沖器的裝置。
此外或替代地,此類計(jì)算系統(tǒng)的實(shí)施方案可包含以下特征中的一或多者。所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置進(jìn)一步用于通過形成分裂式堆棧而寫入所述控制框架,其中所述多個(gè)控制信息條目安置在所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置的第一區(qū)域中,所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置的所述第一區(qū)域物理上與存儲對應(yīng)于所述控制信息條目的程序數(shù)據(jù)的所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置的第二區(qū)域分離。所述用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置進(jìn)一步用于通過形成影子堆棧而寫入所述控制框架,其中所述多個(gè)控制信息條目的至少主要部分為寫入在堆??蚣苤械亩褩?蚣芸刂菩畔l目的主要部分的重復(fù),且其中所述堆??蚣艽鎯υ谒鲇糜诖鎯Τ绦驍?shù)據(jù)及控制數(shù)據(jù)的裝置中且至少在被原始寫入時(shí)含有對應(yīng)于所述堆棧框架控制信息條目的程序數(shù)據(jù)。
一種實(shí)例非暫時(shí)性處理器可讀存儲裝置包含處理器可讀指令,所述處理器可讀指令經(jīng)配置以致使處理器進(jìn)行以下操作:通過將控制信息條目寫入到所述處理器中的控制堆棧緩沖器中而對函數(shù)調(diào)用作出響應(yīng);對控制框架填充所述控制堆棧緩沖器作出響應(yīng),所述控制框架包括多個(gè)控制信息條目,且通過將所述控制框架寫入到以通信方式耦合到所述處理器且物理上與所述處理器分離的外部存儲器且通過將對應(yīng)于另外函數(shù)調(diào)用的另外控制信息條目寫入到所述控制堆棧緩沖器而接收所述另外函數(shù)調(diào)用。
此類存儲裝置的實(shí)施方案可包含以下特征中的一或多者。所述指令經(jīng)進(jìn)一步配置以致使所述處理器使用所述多個(gè)控制信息條目中的至少第一控制信息條目及第二控制信息條目來確定認(rèn)證標(biāo)簽。所述指令經(jīng)進(jìn)一步配置以致使所述處理器將所述認(rèn)證標(biāo)簽的相應(yīng)部分與所述第一控制信息條目及所述第二控制信息條目中的每一者相關(guān)聯(lián)地存儲到所述外部存儲器。所述多個(gè)控制信息條目包含兩個(gè)以上控制信息條目,且其中所述經(jīng)配置以致使所述處理器確定所述認(rèn)證標(biāo)簽的指令經(jīng)配置以致使所述處理器通過將函數(shù)應(yīng)用于所述多個(gè)控制信息條目中的全部而確定所述認(rèn)證標(biāo)簽。所述指令經(jīng)進(jìn)一步配置以致使所述處理器進(jìn)行以下操作:使用存儲在所述外部存儲器中的至少所述第一控制信息條目及所述第二控制信息條目來確定認(rèn)證驗(yàn)證程序;確定所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽;及基于所述認(rèn)證驗(yàn)證程序匹配于所述認(rèn)證標(biāo)簽而將所述第一控制信息條目從所述外部存儲器寫入到所述控制堆棧緩沖器。
此外或替代地,此類存儲裝置的實(shí)施方案可包含以下特征中的一或多者。所述經(jīng)配置以致使所述處理器將所述控制框架寫入到所述外部存儲器的指令經(jīng)配置以致使所述處理器通過形成分裂式堆棧而將所述控制框架寫入到所述外部存儲器,其中所述多個(gè)控制信息條目安置在所述外部存儲器的第一區(qū)域中,所述外部存儲器的所述第一區(qū)域物理上與存儲對應(yīng)于所述控制信息條目的程序數(shù)據(jù)的所述外部存儲器的第二區(qū)域分離。所述經(jīng)配置以致使所述處理器將所述控制框架寫入到所述外部存儲器的指令經(jīng)配置以致使所述處理器通過形成影子堆棧而將所述控制框架寫入到所述外部存儲器,其中所述多個(gè)控制信息條目的至少主要部分為寫入在堆棧框架中的堆??蚣芸刂菩畔l目的主要部分的重復(fù),且其中所述堆??蚣艽鎯υ谒鐾獠看鎯ζ髦星抑辽僭诒辉紝懭霑r(shí)含有對應(yīng)于所述堆??蚣芸刂菩畔l目的程序數(shù)據(jù)。
本文中所描述的項(xiàng)目及/或技術(shù)可提供以下能力中的一或多者,及/或未提及的其它能力。用于控制傳送的返回路徑可在執(zhí)行之前予以有效地驗(yàn)證???例如)通過分離控制數(shù)據(jù)及程序數(shù)據(jù)而抑制堆棧溢出惡意探索攻擊??墒褂冕槍Χ褩R绯?溢流)及堆棧填充(用數(shù)據(jù)來填入堆棧)的認(rèn)證而以硬件層級來提供影子或分裂式控制/數(shù)據(jù)堆棧架構(gòu)??梢缘蛷?fù)雜度向影子或分裂式控制/數(shù)據(jù)堆棧架構(gòu)提供簡單管理???例如)通過增加用于控制數(shù)據(jù)認(rèn)證的塊大小、縮減認(rèn)證頻率及/或在要徑外執(zhí)行返回路徑控制數(shù)據(jù)認(rèn)證而以可縮放且透通的方式維護(hù)控制流程完整性??煽s減用于確定針對控制數(shù)據(jù)的消息認(rèn)證代碼的計(jì)算開銷??商峁┢渌芰?,且根據(jù)本發(fā)明的每一實(shí)施方案并非皆必須提供所論述的能力中的任一者,更不用說全部。另外,可有可能通過除了所提到的手段以外的手段來實(shí)現(xiàn)上文所提到的效應(yīng),且所提到的項(xiàng)目/技術(shù)可未必得到所提到的效應(yīng)。
附圖說明
圖1為通信系統(tǒng)的示意圖。
圖2為圖1所展示的計(jì)算系統(tǒng)的框圖。
圖3為圖2所展示的計(jì)算系統(tǒng)的功能框圖。
圖4到5為控制堆棧緩沖器及分裂程序堆棧的簡化圖。
圖6為包含認(rèn)證標(biāo)簽的控制數(shù)據(jù)條目的簡化圖。
圖7為產(chǎn)生控制堆棧的過程的框流程圖。
具體實(shí)施方式
本發(fā)明論述用于產(chǎn)生控制堆棧的技術(shù)。舉例來說,處理器可具有存儲對應(yīng)于軟件程序的最新函數(shù)調(diào)用的最新返回地址的內(nèi)部控制堆棧緩沖器??刂贫褩>彌_器可用于所有函數(shù)返回。如果控制堆棧緩沖器已滿且另一函數(shù)被調(diào)用(溢流),或如果存在上下文切換,那么控制堆棧緩沖器內(nèi)容可被寫入到外部(相對于處理器)存儲器,且用于另一函數(shù)的返回地址或其它上下文可被寫入到控制堆棧緩沖器??刂贫褩>彌_器內(nèi)容可被頁寫入到外部存儲器,其中控制堆棧緩沖器的所有內(nèi)容皆被寫入到外部存儲器,從而清空控制堆棧緩沖器??刂贫褩>彌_器內(nèi)容可被寫入到程序堆棧,所述程序堆棧呈不將相同數(shù)據(jù)存儲在所述程序堆棧中的堆棧框架中的分裂式堆棧布置,或呈將相同數(shù)據(jù)存儲在所述程序堆棧中的堆棧框架中的影子堆棧布置??苫诳刂贫褩>彌_器而確定認(rèn)證標(biāo)簽,且可與外部存儲器中的控制堆棧緩沖器內(nèi)容相關(guān)聯(lián)地存儲認(rèn)證標(biāo)簽。如果通過使控制堆棧緩沖器中的所有返回地址被使用(下溢)而清空控制堆棧緩沖器,或如果存在上下文切換,那么可將控制數(shù)據(jù)從外部存儲器寫入到控制堆棧緩沖器。如果使用認(rèn)證標(biāo)簽,那么可在將存儲在外部存儲器中的返回地址寫入到控制堆棧緩沖器之前重新確定認(rèn)證標(biāo)簽且比較所述認(rèn)證標(biāo)簽與存儲在外部存儲器中的認(rèn)證標(biāo)簽。如果經(jīng)存儲的認(rèn)證標(biāo)簽與經(jīng)重新確定的認(rèn)證標(biāo)簽匹配,那么可將返回地址從外部存儲器寫入到控制堆棧緩沖器,且否則不將返回地址從外部存儲器寫入到控制堆棧緩沖器。如果使用影子堆棧,那么可比較影子堆棧中的返回地址與程序堆棧中的返回地址,且如果所述兩組返回地址匹配,那么僅將(例如)影子堆棧中的返回地址寫入到控制堆棧緩沖器??墒褂闷渌夹g(shù),包含但不限于下文所論述的技術(shù)。
參看圖1,通信系統(tǒng)10包含計(jì)算裝置12、基站收發(fā)信機(jī)(bts)14、網(wǎng)絡(luò)16、服務(wù)器18、接入點(diǎn)(ap)20,及惡意探索源22。系統(tǒng)10為通信系統(tǒng)之處在于系統(tǒng)10的組件可(例如)經(jīng)由網(wǎng)絡(luò)16、bts14(及/或未展示的一或多個(gè)bts)及/或一或多個(gè)接入點(diǎn)20而彼此直接地或間接地通信。雖然惡意探索通常是經(jīng)由通信網(wǎng)絡(luò)(諸如圖1所展示的網(wǎng)絡(luò)16)及計(jì)算裝置12中的網(wǎng)絡(luò)接口而引入到計(jì)算裝置中,但本文中所論述的技術(shù)同等地適用于幫助防止攻擊的成功,在攻擊的成功中,惡意探索是經(jīng)由其它手段(例如,到含有惡意探索的外部存儲器的連接)而引入到計(jì)算裝置。所展示的實(shí)例計(jì)算裝置12包含移動(dòng)電話、桌上型計(jì)算機(jī)、膝上型計(jì)算機(jī)及平板計(jì)算機(jī)??墒褂糜制渌?jì)算裝置,而無論為當(dāng)前現(xiàn)有的還是在未來開發(fā)的。
參看圖2,計(jì)算裝置12中的一者的實(shí)例包括計(jì)算系統(tǒng)50,其包含:包含控制堆棧緩沖器54的處理器52、包含(任選地)軟件58的外部存儲器56,及認(rèn)證器60。處理器52優(yōu)選地為智能硬件裝置,例如,諸如由
參看圖3,同時(shí)參考圖2,計(jì)算系統(tǒng)50包含:包含控制堆棧緩沖器模塊72(用于存儲控制堆棧緩沖器的裝置)的處理器模塊70(處理裝置)、認(rèn)證模塊74(認(rèn)證裝置),及控制框架模塊76(用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置)。處理器模塊70包含用于將控制數(shù)據(jù)寫入到控制堆棧緩沖器的裝置,及用于將控制框架寫入到用于存儲程序數(shù)據(jù)及控制數(shù)據(jù)的裝置的裝置。模塊70、72為可分別由處理器52及控制堆棧緩沖器54實(shí)施的功能模塊。認(rèn)證模塊74為可由認(rèn)證器60實(shí)施的功能模塊??刂瓶蚣苣K76為可由外部存儲器56及關(guān)聯(lián)硬件及/或固件及/或處理器52及存儲在存儲器56中的軟件58實(shí)施的功能模塊。因此,對執(zhí)行或經(jīng)配置以執(zhí)行功能的模塊70、72、74、76中的任一者的參考為執(zhí)行或經(jīng)配置以執(zhí)行所述功能的對應(yīng)設(shè)備的速記。
還參看圖4到5,形成控制堆棧102、104及程序堆棧80??刂贫褩?02、104含有用于由處理器52運(yùn)行的程序的控制數(shù)據(jù),且被分割成兩個(gè)部分:在控制堆棧緩沖器54中的內(nèi)部控制堆棧102,及在外部存儲器56中處于堆棧存儲器78中的外部控制堆棧104。控制數(shù)據(jù)包含返回地址及/或框架指針及/或其它控制信息。程序堆棧80包含程序數(shù)據(jù),所述程序數(shù)據(jù)包含本地變量、自變量等等;且程序堆棧80還可包含一些控制數(shù)據(jù),例如,框架指針。計(jì)算系統(tǒng)50的操作系統(tǒng)將控制指針(cp)(單獨(dú)架構(gòu)寄存器)指向程序數(shù)據(jù)中的目前程序位置,此處在圖4所展示的實(shí)例中指向程序堆棧80中的程序數(shù)據(jù)的頂部。
控制堆棧緩沖器模塊72經(jīng)配置以從處理器52接收控制數(shù)據(jù)、將控制數(shù)據(jù)存儲在控制堆棧緩沖器(csb)54中、將控制數(shù)據(jù)塊從csb54發(fā)送到外部存儲器56,及從外部存儲器56接收控制數(shù)據(jù)塊。csb54及外部控制堆棧104在啟動(dòng)時(shí)為空的,且程序堆棧80也為空的。隨著由處理器52以軟件程序執(zhí)行函數(shù)調(diào)用,處理器52將控制數(shù)據(jù)提供到控制堆棧緩沖器模塊72??刂贫褩>彌_器模塊72經(jīng)配置以接收控制數(shù)據(jù)且將這些控制數(shù)據(jù)寫入到控制堆棧緩沖器54。舉例來說,如圖4所展示,控制堆棧緩沖器模塊72可將返回地址作為控制數(shù)據(jù)條目82寫入到csb54中。在此實(shí)例中,控制數(shù)據(jù)為返回地址,但這僅為實(shí)例,且代替返回地址或除了返回地址以外,諸如框架指針等等的其它控制數(shù)據(jù)也可存儲在csb54中。模塊72經(jīng)配置以通過從csb54移除控制數(shù)據(jù)且將新控制數(shù)據(jù)條目寫入到csb54中而對處理器52在csb54已滿時(shí)使新控制數(shù)據(jù)條目存儲在csb54中作出響應(yīng),或?qū)ι舷挛那袚Q(即,正由處理器52運(yùn)行的程序或程序的部分的改變)作出響應(yīng)。csb54在csb54的內(nèi)容待發(fā)送到控制框架模塊76的情況下已“滿”,即使csb54中的額外存儲空間可用也如此。然而,通常,將在將內(nèi)容發(fā)送到控制框架模塊76之前使用csb54的整個(gè)存儲空間。模塊72將多個(gè)控制數(shù)據(jù)條目82且優(yōu)選地將所有控制數(shù)據(jù)條目82頁寫入到控制框架模塊76。因此,模塊72可通過將csb54的內(nèi)容發(fā)送到控制框架模塊76而清空csb54。如圖5所展示,模塊72已通過將返回地址1到返回地址8發(fā)送到控制框架模塊76且將返回地址9寫入到csb54而清空csb54。相反地,當(dāng)模塊72通過使用csb54中的控制數(shù)據(jù)而清空csb54時(shí),模塊72可從控制框架模塊76檢索控制數(shù)據(jù)塊。因此,如果圖5中的返回地址9由處理器模塊70使用,那么模塊72可請求下一返回地址塊且從控制框架模塊76接收返回地址1到返回地址8,從圖5轉(zhuǎn)到圖4。在圖4到5所展示的實(shí)例中,csb具有八個(gè)控制數(shù)據(jù)條目82的容量,但可使用csb54的其它容量。
控制堆棧緩沖器模塊72優(yōu)選地但未必經(jīng)由認(rèn)證模塊74而將控制數(shù)據(jù)條目82的塊發(fā)送到控制框架模塊76。認(rèn)證模塊74經(jīng)配置成以使得安全性信息極不可能被偶然重新創(chuàng)建的方式或即使供導(dǎo)出安全性信息的控制數(shù)據(jù)條目82為我們所知也從控制數(shù)據(jù)條目82中的一或多者導(dǎo)出安全性信息。安全性信息極不可能被重新創(chuàng)建之處在于重新創(chuàng)建或再現(xiàn)安全性信息將計(jì)算上昂貴,從而使重新創(chuàng)建所述信息所需要的資源(時(shí)間、計(jì)算能量等等)太大而無法適當(dāng)化,即使有可能適當(dāng)化也如此。為了產(chǎn)生安全性信息,認(rèn)證模塊74可(例如)將函數(shù)應(yīng)用于控制數(shù)據(jù)條目82中的一或多者且優(yōu)選地應(yīng)用于控制數(shù)據(jù)條目82中的全部,以確定安全性信息。此類函數(shù)的實(shí)例為散列函數(shù)。認(rèn)證模塊74經(jīng)配置成使得嘗試在計(jì)算系統(tǒng)50中產(chǎn)生惡意探索的實(shí)體難以(如果并非不可能)存取認(rèn)證模塊74且尤其是存取由認(rèn)證模塊74應(yīng)用的包含與控制數(shù)據(jù)條目82進(jìn)行散列的任何散列值的函數(shù)。
作為實(shí)例,認(rèn)證模塊74經(jīng)配置以基于來自csb54的多個(gè)控制數(shù)據(jù)條目82而產(chǎn)生認(rèn)證標(biāo)簽。優(yōu)選地,認(rèn)證模塊74使用從csb54清空的所有控制數(shù)據(jù)條目82以便確定認(rèn)證標(biāo)簽。認(rèn)證標(biāo)簽為加密安全消息認(rèn)證代碼(mac)。認(rèn)證模塊74可使用多種技術(shù)中的任一者來確定認(rèn)證標(biāo)簽。舉例來說,認(rèn)證模塊74可將散列函數(shù)應(yīng)用于控制數(shù)據(jù)條目82,從而使用散列值以確定認(rèn)證標(biāo)簽。認(rèn)證標(biāo)簽可具有多種長度中的任一者(其可基于諸如csb大小的其它因素),且可存儲在外部存儲器56中的多個(gè)位置中。舉例來說,csb54的大小可為高速緩存行的倍數(shù),且認(rèn)證標(biāo)簽大小可被設(shè)置為兩個(gè)位乘以csb54中的控制數(shù)據(jù)條目82的數(shù)量。因此,對于八(8)個(gè)條目82的csb大小(每四個(gè)字節(jié)長),且在32字節(jié)高速緩存行的情況下,對于認(rèn)證標(biāo)簽將存在16個(gè)位,每條目兩個(gè)位。可增加csb54的大小以容納較大認(rèn)證標(biāo)簽。
認(rèn)證模塊74經(jīng)配置以將具有控制數(shù)據(jù)條目82的認(rèn)證標(biāo)簽提供到控制框架模塊76。舉例來說,認(rèn)證模塊74可在將控制數(shù)據(jù)條目82提供到控制框架模塊76之前將認(rèn)證標(biāo)簽組合到控制數(shù)據(jù)條目82中。因此,認(rèn)證模塊74可產(chǎn)生如圖6所展示的經(jīng)修改的控制數(shù)據(jù)條目84,其中經(jīng)修改的控制數(shù)據(jù)條目84中的每一者包含控制數(shù)據(jù)主體86及認(rèn)證標(biāo)簽部分88。替代地,認(rèn)證模塊74可將控制數(shù)據(jù)主體86(此處為返回地址主體)及對應(yīng)認(rèn)證標(biāo)簽部分88分離地提供到控制框架模塊76。
控制框架模塊76經(jīng)配置以接收控制數(shù)據(jù)主體86及認(rèn)證標(biāo)簽部分88,且將經(jīng)修改的控制數(shù)據(jù)條目84存儲在外部控制堆棧104中。模塊76可分離地接收控制數(shù)據(jù)主體86及認(rèn)證標(biāo)簽部分88,且將其組合以形成經(jīng)修改的控制數(shù)據(jù)條目84。替代地,模塊76可接收經(jīng)修改的控制數(shù)據(jù)條目84,其中控制數(shù)據(jù)主體86與認(rèn)證標(biāo)簽部分88已經(jīng)組合。在任一狀況下,模塊76經(jīng)配置以將經(jīng)修改的控制數(shù)據(jù)條目84存儲在外部控制堆棧104中,即,與認(rèn)證標(biāo)簽部分88相關(guān)聯(lián)地存儲控制數(shù)據(jù)主體86,使得可在設(shè)法將控制數(shù)據(jù)主體86返回到內(nèi)部控制堆棧102的情況下檢索認(rèn)證標(biāo)簽部分88。經(jīng)修改的控制數(shù)據(jù)條目84被寫入到外部控制堆棧104,如圖5所展示。如圖6所展示,在此實(shí)例中,認(rèn)證標(biāo)簽部分88附加到控制數(shù)據(jù)主體86,例如,占據(jù)經(jīng)修改的控制數(shù)據(jù)條目84的兩個(gè)最低有效位。另外在此實(shí)例中,出于說明性目的,在圖6中用兩數(shù)字標(biāo)識符來標(biāo)記認(rèn)證標(biāo)簽部分88。標(biāo)識符的第一數(shù)字對應(yīng)于認(rèn)證標(biāo)簽編號,且標(biāo)識符的第二數(shù)字對應(yīng)于返回地址。因此,標(biāo)簽11對應(yīng)于用于返回地址1的認(rèn)證標(biāo)簽1的部分。所有認(rèn)證標(biāo)簽部分88的組合構(gòu)成認(rèn)證標(biāo)簽90。
如圖5所展示,控制框架模塊76經(jīng)配置以將從控制堆棧緩沖器模塊72接收的控制數(shù)據(jù)92存儲在外部控制堆棧104中,控制數(shù)據(jù)92物理上從存儲在程序堆棧80中的程序數(shù)據(jù)94位移??刂瓶蚣苣K76經(jīng)配置以將程序數(shù)據(jù)94的堆棧框架存儲在一或多個(gè)物理位置中,且至少最初將控制數(shù)據(jù)92存儲在物理上從存儲程序數(shù)據(jù)94的位置位移的一或多個(gè)其它物理位置中。控制數(shù)據(jù)92及程序數(shù)據(jù)94的末端可最終在外部控制堆棧104及程序堆棧80到達(dá)彼此的情況下安置在鄰近物理位置中,但堆棧104、80開始于經(jīng)位移位置(即,由存儲器位置分離)中。因此,將不可能(如果并非不可能)使程序數(shù)據(jù)中的溢流影響控制數(shù)據(jù)92。因此,程序數(shù)據(jù)94中的溢流不可能變更(如果不受到變更禁止)控制數(shù)據(jù)94,因此縮減(如果不消除)堆棧溢出惡意探索的可能性。圖5所展示的實(shí)例僅僅為實(shí)例,這是因?yàn)榭墒褂帽姸嗥渌鎯ζ鞔鎯ε渲?。舉例來說,控制框架模塊76可在堆棧存儲器78中的鄰近物理位置處開始程序數(shù)據(jù)94及控制數(shù)據(jù)92,且使控制數(shù)據(jù)92及程序數(shù)據(jù)94在相對方向(即,彼此物理上遠(yuǎn)離)上增長。又其它配置是可能的且可被使用。
如圖4到5所展示,控制框架模塊76經(jīng)配置以將程序數(shù)據(jù)94存儲在堆??蚣苤小T诖藢?shí)例中,每一堆??蚣馨镜刈兞?、框架指針及自變量,但不包含返回地址。存儲在csb54中(或被存儲為控制數(shù)據(jù)92)的控制數(shù)據(jù)不存儲在堆棧框架中的此配置被稱作分裂式堆棧配置。即,控制數(shù)據(jù)92經(jīng)存儲為物理上與程序數(shù)據(jù)94分離,且僅駐留于堆棧存儲器78的控制數(shù)據(jù)92中,而不駐留于堆棧存儲器78的程序數(shù)據(jù)94中。替代地,控制數(shù)據(jù)92可包含在程序數(shù)據(jù)94中。存儲在csb54中(或被存儲為控制數(shù)據(jù)92)的控制數(shù)據(jù)也存儲在堆??蚣苤械拇伺渲帽环Q作影子堆棧配置。舉例來說,返回地址可存儲在控制數(shù)據(jù)92中,且也存儲在程序數(shù)據(jù)94的相應(yīng)堆棧框架中,例如,在框架指針與第一自變量之間。
控制框架模塊76經(jīng)進(jìn)一步配置以將經(jīng)修改的控制數(shù)據(jù)條目84提供到認(rèn)證模塊74??刂瓶蚣苣K76經(jīng)配置以通過提供對應(yīng)于認(rèn)證標(biāo)簽90的經(jīng)修改的控制數(shù)據(jù)條目84的塊而對從認(rèn)證模塊74接收請求(例如,響應(yīng)于csb54中的下溢或上下文切換)作出響應(yīng)??刂瓶蚣苣K76相應(yīng)地調(diào)整控制指針,從而響應(yīng)于提供響應(yīng)于csb54的下溢的控制數(shù)據(jù)而將控制指針移動(dòng)到下一控制數(shù)據(jù)塊,或響應(yīng)于上下文切換而存儲控制指針以供未來參考。
認(rèn)證模塊74經(jīng)進(jìn)一步配置以確定外部控制堆棧104中的控制數(shù)據(jù)是否已在將控制數(shù)據(jù)從外部控制堆棧104提供到控制堆棧緩沖器模塊72之前被修改。認(rèn)證模塊74經(jīng)配置以響應(yīng)于將控制數(shù)據(jù)從外部控制堆棧104寫入到csb54中的內(nèi)部控制堆棧102的期望(例如,請求)而驗(yàn)證控制數(shù)據(jù)完整性,例如,響應(yīng)于csb54中的下溢或上下文切換。為了驗(yàn)證控制數(shù)據(jù)完整性,認(rèn)證模塊74可向控制框架模塊76請求用于認(rèn)證標(biāo)簽90的經(jīng)修改的控制數(shù)據(jù)條目84、確定經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽(也被稱作認(rèn)證驗(yàn)證程序),且確定經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽是否匹配于存儲在外部控制堆棧104中的認(rèn)證標(biāo)簽90。對于待從外部控制堆棧104寫入到csb54中的內(nèi)部控制堆棧102中的控制數(shù)據(jù),認(rèn)證模塊74重新計(jì)算應(yīng)用于控制數(shù)據(jù)以產(chǎn)生認(rèn)證標(biāo)簽90的函數(shù),此時(shí)使用控制數(shù)據(jù)主體86來計(jì)算所述函數(shù)以確定經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽。為了重新計(jì)算函數(shù),認(rèn)證模塊74經(jīng)配置以從控制框架模塊76接收控制數(shù)據(jù)且將函數(shù)應(yīng)用于經(jīng)接收的控制數(shù)據(jù)。認(rèn)證模塊74經(jīng)配置以將用以確定認(rèn)證標(biāo)簽90的函數(shù)應(yīng)用于從控制框架模塊76接收的控制數(shù)據(jù)主體86以確定經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽。認(rèn)證模塊74經(jīng)進(jìn)一步配置以比較經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽與從控制框架模塊76接收的認(rèn)證標(biāo)簽90,以確定經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽是否匹配于認(rèn)證標(biāo)簽90。認(rèn)證模塊74經(jīng)配置以通過將控制數(shù)據(jù)條目86提供到控制堆棧緩沖器模塊72而對指示經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽匹配于認(rèn)證標(biāo)簽90的此比較作出響應(yīng)。認(rèn)證模塊74經(jīng)配置以通過抑制將控制數(shù)據(jù)條目86發(fā)送到控制堆棧緩沖器模塊72且通過向處理器模塊70提供控制數(shù)據(jù)完整性已因?yàn)橐研薷目刂茢?shù)據(jù)主體86中的至少一者而損失的警告而對指示經(jīng)重新計(jì)算的認(rèn)證標(biāo)簽不匹配于認(rèn)證標(biāo)簽90的此比較作出響應(yīng)。
參看圖7,同時(shí)進(jìn)一步參考圖1到6,產(chǎn)生控制堆棧的過程150包含所展示的階段。然而,過程150僅為實(shí)例而非限制性的???例如)通過添加、移除、重新布置、組合、同時(shí)地執(zhí)行多個(gè)階段及/或?qū)我浑A段分裂成多個(gè)階段來更改過程150。
在階段152處,過程150包含響應(yīng)于一或多個(gè)函數(shù)調(diào)用而將多個(gè)控制信息條目寫入到在處理器內(nèi)部的控制緩沖器中??刂贫褩>彌_器模塊72通過將控制數(shù)據(jù)條目82寫入到在處理器52內(nèi)部的csb54中而對一或多個(gè)函數(shù)調(diào)用作出響應(yīng)。寫入控制數(shù)據(jù)條目82直到csb54已滿。在csb54填充之前,可響應(yīng)于函數(shù)完成或以其它方式使用相應(yīng)控制數(shù)據(jù)條目82中的控制數(shù)據(jù)而從csb54移除控制數(shù)據(jù)條目82中的一或多者。
在階段154處,過程150包含響應(yīng)于控制緩沖器已滿且接收到另外函數(shù)調(diào)用而進(jìn)行以下操作:將多個(gè)控制信息條目寫入到在處理器外部的外部存儲器;及將對應(yīng)于另外函數(shù)調(diào)用的另外控制信息條目寫入到控制緩沖器??刂贫褩>彌_器模塊72通過將控制數(shù)據(jù)條目82頁寫入到外部存儲器56而對csb54已滿且接收到另外控制數(shù)據(jù)條目82以供存儲在csb54中作出響應(yīng)。舉例來說,控制堆棧緩沖器模塊72優(yōu)選地經(jīng)由認(rèn)證模塊74而將內(nèi)部控制堆棧102中的控制數(shù)據(jù)條目82的塊頁寫入到外部存儲器56,即,通過將控制數(shù)據(jù)條目82的塊發(fā)送到控制框架模塊76。
過程150可進(jìn)一步包含使用多個(gè)控制信息條目中的至少第一控制信息條目及第二控制信息條目來確定認(rèn)證標(biāo)簽。舉例來說,認(rèn)證模塊74從控制堆棧緩沖器模塊72接收控制數(shù)據(jù)條目82的塊,且使用控制數(shù)據(jù)條目82中的至少兩者來確定認(rèn)證標(biāo)簽。認(rèn)證模塊74可使用從控制堆棧緩沖器模塊72接收的所有控制數(shù)據(jù)條目82以確定認(rèn)證標(biāo)簽90。過程150可包含將認(rèn)證標(biāo)簽的相應(yīng)部分與控制信息條目中的每一者相關(guān)聯(lián)地存儲到外部存儲器。認(rèn)證模塊74結(jié)合控制框架模塊76可將認(rèn)證標(biāo)簽部分88與對應(yīng)控制數(shù)據(jù)主體86相關(guān)聯(lián)地存儲到外部存儲器56。過程150可進(jìn)一步包含使用存儲在外部存儲器中的第一控制信息條目及第二控制信息條目來確定認(rèn)證驗(yàn)證程序、確定認(rèn)證驗(yàn)證程序匹配于認(rèn)證標(biāo)簽,及基于認(rèn)證驗(yàn)證程序匹配于認(rèn)證標(biāo)簽而將第一控制信息條目從外部存儲器寫入到控制堆棧緩沖器。舉例來說,認(rèn)證模塊74通過從控制框架模塊76檢索經(jīng)修改的控制數(shù)據(jù)條目84而對csb54中的新下溢條件或上下文切換作出響應(yīng)。認(rèn)證模塊74通過重新計(jì)算認(rèn)證標(biāo)簽來確定認(rèn)證驗(yàn)證程序,且比較認(rèn)證驗(yàn)證程序與認(rèn)證標(biāo)簽(例如,認(rèn)證標(biāo)簽90)。另外,響應(yīng)于如由認(rèn)證模塊74所確定的認(rèn)證驗(yàn)證程序匹配于認(rèn)證標(biāo)簽,認(rèn)證模塊74將至少控制數(shù)據(jù)主體86發(fā)送到控制堆棧緩沖器模塊72,控制堆棧緩沖器模塊72將控制數(shù)據(jù)主體86寫入到csb54中的內(nèi)部控制堆棧102。
將多個(gè)控制信息條目寫入到外部存儲器可包括伴隨將多個(gè)控制信息條目安置在外部存儲器的第一區(qū)域中而將多個(gè)控制信息條目寫入到外部存儲器,外部存儲器的第一區(qū)域物理上從存儲對應(yīng)于控制信息條目的程序數(shù)據(jù)的外部存儲器的第二區(qū)域位移??刂瓶蚣苣K76可將外部控制堆棧104存儲在堆棧存儲器78中的物理上從程序堆棧80位移的位置中。另外,多個(gè)控制信息條目可被寫入到外部存儲器,其中多個(gè)控制信息條目的至少主要部分為寫入在堆??蚣苤械亩褩?蚣芸刂菩畔l目的主要部分的重復(fù),其中堆??蚣艽鎯υ谕獠看鎯ζ髦星抑辽僭诒辉紝懭霑r(shí)含有對應(yīng)于堆??蚣芸刂菩畔l目的程序數(shù)據(jù)。舉例來說,控制框架模塊76可將堆棧框架存儲在程序堆棧80中,堆??蚣馨鳛榭刂茢?shù)據(jù)主體86而存儲在外部控制堆棧104中的控制數(shù)據(jù)作為影子堆棧。另外,過程150可進(jìn)一步包含確定多個(gè)控制信息條目的至少主要部分匹配于堆??蚣芸刂菩畔l目的至少主要部分,及基于多個(gè)控制信息條目的至少主要部分匹配于堆??蚣芸刂菩畔l目的至少主要部分而將多個(gè)控制信息條目從外部存儲器寫入到控制堆棧緩沖器。舉例來說,認(rèn)證模塊74可經(jīng)配置以且可確定存儲在外部控制堆棧104中的控制數(shù)據(jù)主體86匹配于程序堆棧80的對應(yīng)堆??蚣苤械膶?yīng)控制數(shù)據(jù)。認(rèn)證模塊74可經(jīng)配置以且可在外部控制堆棧104中的控制數(shù)據(jù)主體86不匹配于堆棧框架中的對應(yīng)控制數(shù)據(jù)的情況下抑制將控制數(shù)據(jù)主體86遞送到控制堆棧緩沖器模塊72。相反地,認(rèn)證模塊74可經(jīng)配置以且可在外部控制堆棧104中的控制數(shù)據(jù)主體86匹配于堆??蚣苤械膶?yīng)控制數(shù)據(jù)的情況下將控制數(shù)據(jù)主體86發(fā)送到控制堆棧緩沖器模塊72,且控制堆棧緩沖器模塊72可將經(jīng)接收的控制數(shù)據(jù)主體86寫入到csb54作為內(nèi)部控制堆棧102。
其它考慮
其它實(shí)例及實(shí)施方案是在本發(fā)明及隨附權(quán)利要求書的范圍及精神內(nèi)。舉例來說,歸因于軟件的性質(zhì),可使用由處理器、硬件、固件、硬連線或這些中的任一者的組合執(zhí)行的軟件來實(shí)施上文所描述的功能。實(shí)施功能的特征還可物理上位于各種位置處,包含經(jīng)分布成使得功能的部分實(shí)施于不同物理位置處。此外,如本文中所使用,包含權(quán)利要求書中所使用,“中的至少一者”前的項(xiàng)目列表中所使用的“或”指示分離性列表,使得(例如)“a、b或c中的至少一者”的列表意指單獨(dú)a,或單獨(dú)b,或單獨(dú)c,或ab,或ac,或bc,或abc(即,a及b及c),或與一個(gè)以上同一特征的組合(例如,aa、aab、abbc等等)。
作為另一實(shí)例實(shí)施方案,代替將外部控制堆棧104存儲為單獨(dú)實(shí)體,控制框架模塊76可以分散方式存儲外部控制堆棧104。在此狀況下,經(jīng)修改的控制數(shù)據(jù)條目84將存儲在具有相應(yīng)堆??蚣艿某绦蚨褩?0中??刂瓶蚣苣K76將經(jīng)配置以找到外部控制堆棧104且將外部控制堆棧104遞送到認(rèn)證模塊74,且認(rèn)證模塊74將經(jīng)配置以確定控制數(shù)據(jù)完整性,如上文所論述。
如本文中所使用,包含權(quán)利要求書中所使用,除非另有陳述,否則功能或操作是“基于”項(xiàng)目或條件的陳述意指所述功能或操作是基于所陳述的項(xiàng)目或條件,且可基于除了所陳述的項(xiàng)目或條件以外的一或多個(gè)項(xiàng)目及/或條件。
另外,信息被發(fā)送或發(fā)射“到”實(shí)體的指示或?qū)⑿畔l(fā)送或發(fā)射“到”實(shí)體的陳述并不要求完成通信。此類指示或陳述包含信息是從發(fā)送實(shí)體傳送,但不到達(dá)信息的預(yù)期接收者。即使不實(shí)際上接收信息,預(yù)期接收者仍可被稱作接收實(shí)體,例如,接收執(zhí)行環(huán)境。
可根據(jù)特定要求而作出大致變化。舉例來說,也可使用定制硬件,及/或可以硬件、軟件(包含便攜式軟件,諸如小程序等等)或此兩者實(shí)施特定元件。另外,可使用到諸如網(wǎng)絡(luò)輸入/輸出裝置的其它計(jì)算裝置的連接。
如本文中所使用,術(shù)語“機(jī)器可讀媒體”及“計(jì)算機(jī)可讀媒體”是指參與提供致使機(jī)器以特定方式操作的數(shù)據(jù)的任何媒體。在使用計(jì)算機(jī)系統(tǒng)的情況下,各種計(jì)算機(jī)可讀媒體可涉及到將指令/代碼提供到處理器以供執(zhí)行,及/或可用以存儲及/或攜帶此類指令/代碼(例如,作為信號)。在許多實(shí)施方案中,計(jì)算機(jī)可讀媒體為物理及/或有形存儲媒體。此類媒體可采取許多形式,包含但不限于非易失性媒體及易失性媒體。非易失性媒體包含(例如)光盤及/或磁盤。易失性媒體包含但不限于動(dòng)態(tài)存儲器。
常見形式的物理及/或有形計(jì)算機(jī)可讀媒體包含(例如)軟盤、柔性磁盤、硬盤、磁帶,或任何其它磁性媒體、cd-rom、任何其它光學(xué)媒體、打孔卡、紙帶、具有孔圖案的任何其它物理媒體、ram、prom、eprom、flash-eprom、任何其它存儲器芯片或盒、如下文中所描述的載波,或可供計(jì)算機(jī)讀取指令及/或代碼的任何其它媒體。
各種形式的計(jì)算機(jī)可讀媒體可涉及到將一或多個(gè)指令的一或多個(gè)序列攜帶到一或多個(gè)處理器以供執(zhí)行。僅僅作為實(shí)例,可最初將指令攜帶在遠(yuǎn)程計(jì)算機(jī)的磁盤及/或光盤上。遠(yuǎn)程計(jì)算機(jī)可將指令加載到其動(dòng)態(tài)存儲器中,且經(jīng)由發(fā)射媒體而將指令作為信號發(fā)送以由計(jì)算機(jī)系統(tǒng)接收及/或執(zhí)行。
上文所論述的方法、系統(tǒng)及裝置為實(shí)例。各種配置可在適當(dāng)時(shí)省略、取代或添加各種過程或組件。舉例來說,在替代配置中,可以不同于所描述的次序的次序來執(zhí)行方法,且可添加、省略或組合各種步驟。此外,可在各種其它配置中組合關(guān)于某些配置所描述的特征??梢韵嗨品绞浇M合配置的不同方面及元件。此外,技術(shù)演進(jìn),且因此,元件中的許多者為實(shí)例且并不限制本發(fā)明或權(quán)利要求書的范圍。
在描述中給出特定細(xì)節(jié)以提供對實(shí)例配置(包含實(shí)施方案)的透徹理解。然而,可在沒有這些特定細(xì)節(jié)的情況下實(shí)踐配置。舉例來說,已在沒有不必要的細(xì)節(jié)的情況下展示眾所周知的電路、過程、算法、結(jié)構(gòu)及技術(shù)以便避免混淆配置。此描述僅提供實(shí)例配置,且并不限制權(quán)利要求書的范圍、適用性或配置。實(shí)情為,所述配置的先前描述提供用于實(shí)施所描述的技術(shù)的描述??稍诓幻撾x本發(fā)明的精神或范圍的情況下對元件的功能及布置進(jìn)行各種改變。
此外,可將配置描述為被描繪為流程圖或框圖的過程。雖然每一者可將操作描述為依序過程,但可并行地或同時(shí)地執(zhí)行操作中的許多者。另外,可重新布置操作的次序。過程可具有圖中未包含的額外階段或功能。此外,可由硬件、軟件、固件、中間件、微碼、硬件描述語言或其任何組合實(shí)施方法的實(shí)例。當(dāng)以軟件、固件、中間件或微碼予以實(shí)施時(shí),用以執(zhí)行任務(wù)的程序代碼或代碼段可存儲在諸如存儲媒體的非暫時(shí)性計(jì)算機(jī)可讀媒體中。處理器可執(zhí)行所描述的任務(wù)。
諸圖所展示及/或本文中論述為彼此連接或通信的組件(功能的或其它)以通信方式耦合。即,其可直接地或間接地連接以實(shí)現(xiàn)其間的通信。
在已描述若干實(shí)例配置的情況下,可在不脫離本發(fā)明的精神的情況下使用各種修改、替代構(gòu)造及等效者。舉例來說,以上元件可為較大系統(tǒng)的組件,其中其它規(guī)則可優(yōu)先于或以其它方式修改本發(fā)明的應(yīng)用。此外,可在考慮以上元件之前、期間或之后進(jìn)行數(shù)種操作。因此,以上描述并不約束權(quán)利要求書的范圍。
另外,可揭示一種以上發(fā)明。