国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      在安全域與次安全域之間進(jìn)行轉(zhuǎn)換時(shí)保護(hù)安全數(shù)據(jù)和程序代碼免受非安全訪問的數(shù)據(jù)處...的制作方法_5

      文檔序號(hào):8385952閱讀:來源:國(guó)知局
      中被設(shè)置為新的值。當(dāng)設(shè)置異常返回值時(shí),狀態(tài) 保存狀態(tài)值字段720的值可被改變以影響后面要被執(zhí)行的狀態(tài)保存處理。以這種方式,信 息可從一個(gè)異常傳遞到另一個(gè)異常以指示對(duì)于異常之間的下一轉(zhuǎn)換是否需要附加狀態(tài)保 存。這將參考圖11-16進(jìn)行解釋。
      [0104] 圖11更詳細(xì)地示出了用于將被調(diào)用者保存寄存器推入安全棧36并將預(yù)定簽名寫 入安全棧36的圖6的步驟420。該附加狀態(tài)保存基于異常返回值的狀態(tài)保存狀態(tài)值字段 720的值。在步驟750,處理器確定異常返回值的狀態(tài)保存狀態(tài)值字段720是否具有值0。 如果是,則跳過將被調(diào)用者保存寄存器推入棧,并且該方法繼續(xù)圖6的步驟430。在這種情 況下,被調(diào)用者保存寄存器的狀態(tài)保存不是必要的,因?yàn)閬碜赃@些寄存器的數(shù)據(jù)將已經(jīng)響 應(yīng)于先前的異常而被保存到棧。
      [0105] 另一方面,如果在步驟750,狀態(tài)保存狀態(tài)值不具有值0,則該方法進(jìn)行到步驟 755,并且來自被調(diào)用者保存寄存器的數(shù)據(jù)被推入安全棧。被調(diào)用者保存寄存器也被清除, 使得其值對(duì)于次安全域中的后續(xù)處理是不可訪問的。此外,在步驟760,預(yù)定簽名222被寫 到棧的底部。然后該方法也進(jìn)行到圖6的步驟430。因此,根據(jù)圖11,附加狀態(tài)保存是否被 執(zhí)行取決于狀態(tài)保存狀態(tài)字段的值。
      [0106] 圖12A示出了針對(duì)當(dāng)執(zhí)行后臺(tái)處理時(shí)接收到的最初異常(如果存在末尾連鎖異常 的鏈,則其是第一個(gè)異常),在圖6的步驟400設(shè)置異常返回寄存器的示例。在步驟770,確 定處理器正在操作后臺(tái)處理的當(dāng)前域。如果當(dāng)前域是安全域,則在步驟775,安全性域字段 725被設(shè)置為具有值1以指示安全域。如果當(dāng)前域是次安全域,則在步驟780,安全性域字 段725被設(shè)置為值0。不管哪個(gè)域是當(dāng)前域,在步驟790,狀態(tài)保存狀態(tài)值字段720被初始化 為值1,其指示在下一個(gè)從次安全域到安全域的轉(zhuǎn)換處可能需要附加狀態(tài)保存。然后,在步 驟795,異常返回值被寫入連接寄存器65,其中狀態(tài)保存狀態(tài)值字段720和安全性字段725 被設(shè)置為在先前步驟中確定的值。然后該方法進(jìn)行回到圖6的步驟405以繼續(xù)異常進(jìn)入處 理。
      [0107] 圖12B更詳細(xì)地示出了用于設(shè)置末尾連鎖異常的異常返回值的步驟432的示例。 在步驟800,該方法確定正被進(jìn)入的異常是否是末尾連鎖異常。如果不是,則該方法進(jìn)行到 圖6的步驟435以分支到異常處理程序,而不執(zhí)行圖12B的剩余步驟。但是,如果該異常是 末尾連鎖異常,則在步驟802,確定安全域值S(來自圖10中被用于終止鏈中的先前異常的 EXC_RETURN值)是否是1。如果不是,則S= 0,并且過程進(jìn)行到步驟804以將狀態(tài)保存狀 態(tài)值設(shè)為1。如果后臺(tái)處理是次安全的(如由S= 0所指示的),則沒有附加狀態(tài)保存將被 執(zhí)行(圖6的步驟408將導(dǎo)致附加狀態(tài)保存步驟被省去)。雖然在這種情況下,狀態(tài)保存狀 態(tài)值字段720將不會(huì)影響狀態(tài)保存,但為了防止次安全域中的處理從狀態(tài)保存狀態(tài)值字段 720獲得信息,最安全的是在步驟804將該字段設(shè)置為默認(rèn)值1。
      [0108] 另一方面,如果在步驟802,安全性域值S等于1,則過程進(jìn)行到步驟805,其中確定 新的末尾連鎖異常是否要在安全域中被處理。如果不是,則再次在步驟804將狀態(tài)保存狀 態(tài)值字段720設(shè)為1。
      [0109] 如果新的異常要在安全域中被處理,則在步驟806,確定當(dāng)前處理是否在安全域 中。如果不是,則在步驟808,狀態(tài)保存狀態(tài)值字段720被設(shè)為0,而如果當(dāng)前處理是安全的, 則在步驟810,狀態(tài)保存狀態(tài)值字段720被設(shè)置為與先前異常相同的值。在步驟812,新的 異常返回值被寫到連接寄存器65,其中狀態(tài)保存狀態(tài)值字段720根據(jù)步驟804、808或810 來設(shè)置。然后該方法進(jìn)行到圖6的步驟435以分支到異常處理程序。
      [0110] 圖13更詳細(xì)地示出了用于使寄存器出棧的圖7的步驟540。基于異常處理的過去 歷史,該棧可包括只有調(diào)用者寄存器需要被恢復(fù)的棧幀215或調(diào)用者和被調(diào)用者保存寄存 器都需要被恢復(fù)的棧幀220。圖13示出了處理器可以如何確定哪個(gè)棧幀將出現(xiàn)在棧上。在 步驟820,確定當(dāng)前的異常返回是否正從次安全異常切換到安全后臺(tái)處理。例如,安全域字 段725可被用于確定后臺(tái)處理是安全還是次安全的。如果處理不是正從次安全異常切換到 安全后臺(tái)處理,則在步驟822,該過程確定當(dāng)前異常返回是否正從次安全異常切換到安全后 臺(tái)處理,并且狀態(tài)保存狀態(tài)值字段720的值是否為0。如果步驟820和822中確定的條件均 不滿足,則在步驟824,只有調(diào)用者寄存器將其值從棧中恢復(fù)。但是,如果在步驟820和822 中測(cè)試的條件中有一個(gè)滿足,則在步驟824將數(shù)據(jù)恢復(fù)到調(diào)用者寄存器之前,在步驟826, 被調(diào)用者保存值被恢復(fù)到被調(diào)用者寄存器。因此,該系統(tǒng)可確定哪些寄存器需要將其寄存 器狀態(tài)恢復(fù)。
      [0111] 圖14更詳細(xì)地示出了圖7的異常返回處理步驟530。在步驟830,確定是否存在 應(yīng)為末尾連鎖的待處理異常。如果該異常的優(yōu)先級(jí)低于或等于剛結(jié)束的異常的優(yōu)先級(jí),而 高于后臺(tái)處理的優(yōu)先級(jí),則該異常應(yīng)為末尾連鎖的。如果存在末尾連鎖異常要被處理,則該 方法返回到圖6的步驟408以處理進(jìn)入末尾連鎖異常。
      [0112]如果不存在末尾連鎖異常,則該方法進(jìn)行到步驟840和850,其中確定:(a)異常返 回正從次安全異常切換到安全后臺(tái)處理;還是(b)異常返回正從安全異常切換到安全后臺(tái) 處理;并且狀態(tài)保存狀態(tài)值字段是否具有值0。如果這些條件中有一個(gè)滿足,則在步驟860, 確定預(yù)定簽名222是預(yù)期的。如果這些條件都不滿足,則在步驟870確定預(yù)定簽名不是預(yù) 期的。然后該方法進(jìn)行到圖7的步驟535,其中基于預(yù)定簽名222是否是預(yù)期的來執(zhí)行處理 以檢測(cè)異常返回是否已被不適當(dāng)?shù)厥褂?。注意,步驟840和850檢查與圖13的步驟820和 822相同的兩個(gè)條件,因?yàn)槿鐖D4B的棧幀220所示,當(dāng)被調(diào)用保存寄存器值出現(xiàn)在棧上時(shí), 則預(yù)定簽名也將是預(yù)期的。
      [0113] 圖15和16示出了圖9所示的不必要的棧保存和恢復(fù)操作示例可如何使用狀態(tài)保 存狀態(tài)值來避免。在圖15中,當(dāng)在點(diǎn)900處發(fā)生次安全異常時(shí),后臺(tái)處理在安全域中。如圖 12A所示,安全性域值S被設(shè)置為1以指示后臺(tái)處理在安全域中,并且狀態(tài)保存狀態(tài)值SCRS 也被設(shè)為1。當(dāng)?shù)谝划惓T邳c(diǎn)910完成時(shí),存在優(yōu)先級(jí)等于或低于第一異常而高于后臺(tái)處理 的待處理的第二異常。該異常是末尾連鎖的,使得其在回到后臺(tái)處理之前被處理。在該點(diǎn) 處,被調(diào)用者保存寄存器的出棧被跳過。當(dāng)切換到第二異常時(shí),狀態(tài)保存狀態(tài)值SCRS被設(shè) 為0,如圖12B的步驟808所示,因?yàn)楹笈_(tái)處理在安全域中(S= 1),因此目的地是安全的而 當(dāng)前過程是次安全的。一旦第二異常在點(diǎn)920處完成處理,則末尾連鎖的第三異常等待處 理,并且要在次安全域中進(jìn)行處理。由于狀態(tài)保存狀態(tài)值SCRS等于0,則根據(jù)圖11的步驟 750,附加狀態(tài)保存可被省去,因?yàn)楸徽{(diào)用者保存寄存器狀態(tài)已被保存到棧。因此,第三異常 可被更快處理,因?yàn)椴淮嬖谂c附加棧操作相關(guān)聯(lián)的延遲。最后,在點(diǎn)930,處理返回到后臺(tái), 并且根據(jù)圖13的方法確定步驟820的條件是滿足的,因此被調(diào)用保存寄存器狀態(tài)和調(diào)用保 存寄存器狀態(tài)均從棧中彈出并恢復(fù)到相應(yīng)的寄存器。
      [0114] 圖16示出了附加棧保存操作可被避免的另一示例。在這種情況下,當(dāng)執(zhí)行安全后 臺(tái)處理時(shí),在點(diǎn)1000處發(fā)生要在安全域中進(jìn)行處理的最初異常。因?yàn)槟康牡夭皇谴伟踩?域,因此根據(jù)圖6的步驟412,被調(diào)用者保存寄存器的保存將被省去。在點(diǎn)1000,只有調(diào)用 者保存寄存器狀態(tài)被硬件推入棧。狀態(tài)保存狀態(tài)值被設(shè)為1,如圖12A所示。在點(diǎn)1005,次 安全第二異常是接著第一異常的末尾連鎖異常。因?yàn)闋顟B(tài)保存狀態(tài)值SCRS等于1,則在點(diǎn) 1005,附加狀態(tài)保存根據(jù)圖11的步驟750和755來執(zhí)行,因此被調(diào)用者保存寄存器狀態(tài)被 推入棧。因?yàn)镾= 1并且目的地是次安全的,則在圖12B的步驟804,對(duì)于接下來的異常,狀 態(tài)保存狀態(tài)值被設(shè)為1。在點(diǎn)1010發(fā)生從次安全第二異常到安全第三異常的末尾連鎖轉(zhuǎn) 換,并且被調(diào)用者保存寄存器的出棧被跳過。在該點(diǎn)處,狀態(tài)保存狀態(tài)值SCRS根據(jù)圖12B 的步驟808而被設(shè)為0,因?yàn)镾= 1,所以目的地是安全的而當(dāng)前過程是次安全的。這意味 著在點(diǎn)1015接著的末尾連鎖異常處,被調(diào)用者保存寄存器的入??杀惶^,因?yàn)闋顟B(tài)保存 狀態(tài)值的值為0。如圖16所示,即使最初異常不是導(dǎo)致從安全域切換到次安全域的轉(zhuǎn)換,在 接下來從安全域到次安全域的切換時(shí)執(zhí)行的附加狀態(tài)保存也可被執(zhí)行一次,并在后面的轉(zhuǎn) 換時(shí)將不再重復(fù)。
      [0115] 從圖15和16可以看出,用于如圖14所示設(shè)置異常返回值的機(jī)制意味著當(dāng)異常正 在次安全域中處理時(shí),狀態(tài)保存狀態(tài)值SCRS將一直具有值1,同時(shí),當(dāng)處理安全異常時(shí),狀 態(tài)保存狀態(tài)值具有可變值〇或1來指示在下一個(gè)安全到次安全的轉(zhuǎn)換處是否需要附加狀態(tài) 保存。這是有用的,因?yàn)樵诖伟踩蛑袝r(shí)將該值設(shè)置為固定值1防止了次安全域中的代碼 能夠從狀態(tài)保存狀態(tài)值中獲得任意信息,狀態(tài)保存狀態(tài)值可允許信息被推測(cè)異常處理的過 去歷史。這提高了安全性。
      [0116] 此外,如果次安全代碼可篡改狀態(tài)保存狀態(tài)值,則這可影響在安全域中時(shí)的后續(xù) 狀態(tài)保存操作,這可導(dǎo)致安全性破壞。為了避免這一情況,處理電路在從次安全異常切換到 安全異常時(shí)(例如,在圖16的點(diǎn)1010處)可檢測(cè)狀態(tài)保存狀態(tài)值仍具有在進(jìn)入次安全域 中的異常時(shí)被設(shè)置的固定值,并且如果該值已被改變,則觸發(fā)錯(cuò)誤。或者,沒有錯(cuò)誤可被觸 發(fā),但是當(dāng)返回安全域時(shí),狀態(tài)保存狀態(tài)值可被重置為其在安全域中應(yīng)具有的值,覆蓋由次 安全代碼對(duì)狀態(tài)保存狀態(tài)值字段的任意修改。
      [0117] 圖17示出了異常的搶占的示例。每個(gè)異??膳c優(yōu)先級(jí)值相關(guān)聯(lián)。如果當(dāng)具有較 低優(yōu)先級(jí)的異常正被執(zhí)行時(shí)發(fā)生具有較高優(yōu)先級(jí)的異常,則高優(yōu)先級(jí)異??蓳屨驾^低優(yōu)先 級(jí)異常,并且在較低優(yōu)先級(jí)異常未完成的情況下進(jìn)行處理。雖然圖17示出了優(yōu)先級(jí)值的較 大數(shù)值指示較高優(yōu)先級(jí)的示例,但是也可用較低優(yōu)先級(jí)值表示較高優(yōu)先級(jí),例如,用優(yōu)先級(jí) 值〇指示高于優(yōu)先級(jí)值1的優(yōu)先級(jí)異常。
      [0118] 如圖17所示,當(dāng)搶占發(fā)生時(shí),被搶占的異常可被視為接下來的異常的后臺(tái)處理。 例如,在圖17的點(diǎn)1100,后臺(tái)處理被打斷以處理具有優(yōu)先級(jí)值1的第一異常。在點(diǎn)1105, 發(fā)生了具有優(yōu)先級(jí)值4的第二異常。由于其是比當(dāng)前優(yōu)先級(jí)等級(jí)更高的優(yōu)先級(jí),因此第二 異常搶占第一異常,并且現(xiàn)在第一異常是后臺(tái)處理。當(dāng)在點(diǎn)1110從第二異常返回時(shí),將執(zhí) 行狀態(tài)恢復(fù)以恢復(fù)在第二異常發(fā)生的時(shí)刻由后臺(tái)處理(即,第一異常)所使用的狀態(tài)。當(dāng) 在點(diǎn)1115第一異常完成時(shí),執(zhí)行進(jìn)一步的狀態(tài)恢復(fù)以恢復(fù)由原后臺(tái)用于處理的值。因此, 在先前的實(shí)施例中,"后臺(tái)處理"自身可以是根據(jù)被更高優(yōu)先級(jí)異常搶占的異常的異常處理 程序來執(zhí)行的處理。
      [0119] 圖18A和18B示出了狀態(tài)保存狀態(tài)值在搶占期間有用處的示例。如果后臺(tái)處理是 安全的,并且發(fā)生次安全異常,則如上所述,被調(diào)用和調(diào)用保存寄存器均將被推入棧,以防 止由次安全
      當(dāng)前第5頁(yè)1 2 3 4 5 6 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1