本發(fā)明涉及處理器技術(shù)領(lǐng)域,尤其涉及一種實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器。
背景技術(shù):
隨著移動(dòng)支付等技術(shù)的快速普及,處理器的安全問(wèn)題越來(lái)越重要。堆棧作為內(nèi)存中用于存放處理器數(shù)據(jù)的空間,其中往往包含大量敏感數(shù)據(jù),如果這些敏感數(shù)據(jù)被破壞,則會(huì)造成程序運(yùn)行失敗或者敏感數(shù)據(jù)泄露等嚴(yán)重問(wèn)題。
另外,由于堆??臻g往往與指令空間使用同一片地址空間,因此,若堆棧結(jié)構(gòu)被破壞,在堆棧結(jié)構(gòu)中存放的數(shù)據(jù)被損壞的同時(shí),很有可能指令信息也會(huì)被惡意篡改。常見(jiàn)的對(duì)處理器攻擊手段中,緩沖區(qū)溢出攻擊就是通過(guò)向緩沖區(qū)(例如堆棧)內(nèi)不斷填充非法數(shù)據(jù),直到數(shù)據(jù)容量超出了該緩沖區(qū)容量,從而將非法溢出覆蓋到與堆??臻g相鄰空間上,從而達(dá)到使處理器使用該攻擊者指定的指令以及數(shù)據(jù),達(dá)到破壞原有程序正常功能或者竊取敏感數(shù)據(jù)等目的。
針對(duì)上述安全攻擊,通常的做法是通過(guò)軟件對(duì)堆棧進(jìn)行保護(hù),即在執(zhí)行相關(guān)堆棧操作時(shí),事先通過(guò)額外的指令對(duì)該堆棧操作內(nèi)存訪問(wèn)指令的地址合法性進(jìn)行檢查,確保堆棧操作符合預(yù)期。
在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下技術(shù)問(wèn)題:
現(xiàn)有的基于軟件的堆棧保護(hù)方式不僅會(huì)顯著增加程序的代碼空間,從而影響程序的執(zhí)行效率。為了規(guī)避上述缺點(diǎn),現(xiàn)有很多應(yīng)用程序均默認(rèn)數(shù)據(jù)長(zhǎng)度與事先分配的堆??臻g相匹配,但是這樣的做法又會(huì)大大降低整個(gè)系統(tǒng)的安全性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供的一種實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器,能夠在保證現(xiàn)有程序空間以及程序執(zhí)行效率不變的前提下,提供一種通過(guò)硬件實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器。
本發(fā)明提供一種實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器,所述處理器包括指令獲取單元、指令譯碼單元、地址加法器、超級(jí)用戶堆棧指針寄存器、普通用戶堆棧指針寄存器、堆棧上邊界寄存器、堆棧下邊界寄存器和堆棧保護(hù)單元,所述處理器能夠訪問(wèn)的內(nèi)存空間包括指令區(qū)、專(zhuān)屬內(nèi)存區(qū)域、普通用戶堆棧區(qū)和超級(jí)用戶堆棧區(qū);
所述指令獲取單元,用于從所述指令區(qū)中獲取所述堆棧讀寫(xiě)指令,并發(fā)送所述堆棧讀寫(xiě)指令至所述指令譯碼單元;
所述指令譯碼單元,用于對(duì)所述堆棧讀寫(xiě)指令進(jìn)行譯碼以得到所述內(nèi)存訪問(wèn)偏移量,并發(fā)送所述內(nèi)存訪問(wèn)偏移量至所述地址加法器;
所述超級(jí)用戶堆棧指針寄存器,用于當(dāng)所述處理器處于超級(jí)用戶模式時(shí),發(fā)送所述超級(jí)用戶堆棧區(qū)的基地址至所述地址加法器;
所述普通用戶堆棧指針寄存器,用于當(dāng)所述處理器處于普通用戶模式時(shí),發(fā)送所述普通用戶堆棧區(qū)的基地址至所述地址加法器;
所述地址加法器,用于根據(jù)所述內(nèi)存訪問(wèn)偏移量和所述超級(jí)用戶堆棧區(qū)的基地址生成所述超級(jí)用戶堆棧區(qū)的訪問(wèn)地址,或者,根據(jù)所述內(nèi)存訪問(wèn)偏移量和所述普通用戶堆棧區(qū)的基地址生成所述普通用戶堆棧區(qū)的訪問(wèn)地址;
所述堆棧上邊界寄存器,用于從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值或者超級(jí)用戶堆棧區(qū)的上邊界值;
所述堆棧下邊界寄存器,用于從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的下邊界值或者超級(jí)用戶堆棧區(qū)的下邊界值;
所述堆棧保護(hù)單元,用于實(shí)時(shí)監(jiān)測(cè)對(duì)應(yīng)堆棧區(qū)的訪問(wèn)地址是否發(fā)生堆棧越界,并在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
可選地,所述堆棧上邊界寄存器,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),將所述堆棧上邊界寄存器中的超級(jí)用戶堆棧區(qū)的上邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值;或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),將所述堆棧上邊界寄存器中的普通用戶堆棧區(qū)的上邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入所述超級(jí)用戶堆棧區(qū)的上邊界值。
可選地,所述堆棧下邊界寄存器,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),將所述堆棧下邊界寄存器中的超級(jí)用戶堆棧區(qū)的下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的下邊界值;或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),將所述堆棧下邊界寄存器中的普通用戶堆棧區(qū)的下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入所述超級(jí)用戶堆棧區(qū)的下邊界值。
可選地,所述堆棧保護(hù)單元,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),清除超級(jí)用戶模式的堆棧越界使能位,開(kāi)啟普通用戶模式的堆棧越界使能位,實(shí)時(shí)監(jiān)測(cè)普通用戶堆棧區(qū)的訪問(wèn)地址是否超出普通用戶堆棧區(qū)的邊界值,并當(dāng)普通用戶堆棧區(qū)的訪問(wèn)地址超出普通用戶堆棧區(qū)的邊界值時(shí)觸發(fā)堆棧越界報(bào)錯(cuò);
或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),清除普通用戶模式的堆棧越界使能位,開(kāi)啟超級(jí)用戶模式的堆棧越界使能位,實(shí)時(shí)監(jiān)測(cè)超級(jí)用戶堆棧區(qū)的訪問(wèn)地址是否超出超級(jí)用戶堆棧區(qū)的邊界值,并當(dāng)超級(jí)用戶堆棧區(qū)的訪問(wèn)地址超出超級(jí)用戶堆棧區(qū)的邊界值時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
可選地,所述堆棧保護(hù)單元,還用于設(shè)置所述普通用戶堆棧區(qū)的邊界值和所述超級(jí)用戶堆棧區(qū)的邊界值,將所述普通用戶堆棧區(qū)的邊界值和所述超級(jí)用戶堆棧區(qū)的邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域。
可選地,所述堆棧保護(hù)單元進(jìn)行堆棧越界監(jiān)測(cè)所針對(duì)的堆棧讀寫(xiě)指令為所有類(lèi)型的堆棧讀寫(xiě)指令或者部分特定類(lèi)型的堆棧讀寫(xiě)指令。
可選地,所述堆棧上邊界寄存器和所述堆棧下邊界寄存器均為通用寄存器或者控制寄存器。
可選地,所述堆棧保護(hù)單元,用于在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)通過(guò)觸發(fā)異常的方式進(jìn)行堆棧越界報(bào)錯(cuò)。
可選地,所述堆棧保護(hù)單元,用于在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)通過(guò)觸發(fā)處理器跳轉(zhuǎn)到特定的堆棧越界處理程序的方式進(jìn)行堆棧越界報(bào)錯(cuò)。
本發(fā)明實(shí)施例提供的實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器,所述處理器包括指令獲取單元、指令譯碼單元、地址加法器、超級(jí)用戶堆棧指針寄存器、普通用戶堆棧指針寄存器、堆棧上邊界寄存器、堆棧下邊界寄存器和堆棧保護(hù)單元,所述處理器能夠訪問(wèn)的內(nèi)存空間包括指令區(qū)、專(zhuān)屬內(nèi)存區(qū)域、普通用戶堆棧區(qū)和超級(jí)用戶堆棧區(qū)。與現(xiàn)有技術(shù)相比,本發(fā)明能夠在保證現(xiàn)有程序空間以及程序執(zhí)行效率不變的前提下,提供一種通過(guò)硬件實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器。
附圖說(shuō)明
圖1為本發(fā)明一實(shí)施例實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器的結(jié)構(gòu)示意圖;
圖2為本發(fā)明的實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器進(jìn)行堆棧自適應(yīng)保護(hù)的工作機(jī)制示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明提供一種實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器,如圖1所示,所述處理器包括指令獲取單元11、指令譯碼單元12、地址加法器13、超級(jí)用戶堆棧指針寄存器14、普通用戶堆棧指針寄存器15、堆棧上邊界寄存器16、堆棧下邊界寄存器17和堆棧保護(hù)單元18,所述處理器能夠訪問(wèn)的內(nèi)存空間包括指令區(qū)、專(zhuān)屬內(nèi)存區(qū)域、普通用戶堆棧區(qū)和超級(jí)用戶堆棧區(qū);
所述指令獲取單元11,用于從所述指令區(qū)中獲取所述堆棧讀寫(xiě)指令,并發(fā)送所述堆棧讀寫(xiě)指令至所述指令譯碼單元12;
所述指令譯碼單元12,用于對(duì)所述堆棧讀寫(xiě)指令進(jìn)行譯碼以得到所述內(nèi)存訪問(wèn)偏移量,并發(fā)送所述內(nèi)存訪問(wèn)偏移量至所述地址加法器13;
所述超級(jí)用戶堆棧指針寄存器14,用于當(dāng)所述處理器處于超級(jí)用戶模式時(shí),發(fā)送所述超級(jí)用戶堆棧區(qū)的基地址至所述地址加法器13;
所述普通用戶堆棧指針寄存器15,用于當(dāng)所述處理器處于普通用戶模式時(shí),發(fā)送所述普通用戶堆棧區(qū)的基地址至所述地址加法器13;
所述地址加法器13,用于根據(jù)所述內(nèi)存訪問(wèn)偏移量和所述超級(jí)用戶堆棧區(qū)的基地址生成所述超級(jí)用戶堆棧區(qū)的訪問(wèn)地址,或者,根據(jù)所述內(nèi)存訪問(wèn)偏移量和所述普通用戶堆棧區(qū)的基地址生成所述普通用戶堆棧區(qū)的訪問(wèn)地址;
所述堆棧上邊界寄存器16,用于從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值或者超級(jí)用戶堆棧區(qū)的上邊界值;
所述堆棧下邊界寄存器17,用于從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的下邊界值或者超級(jí)用戶堆棧區(qū)的下邊界值;
所述堆棧保護(hù)單元18,用于實(shí)時(shí)監(jiān)測(cè)對(duì)應(yīng)堆棧區(qū)的訪問(wèn)地址是否發(fā)生堆棧越界,并在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
具體地,如圖1中實(shí)線箭頭所示,所述處理器處于普通用戶模式,此時(shí),所述堆棧保護(hù)單元18,用于實(shí)時(shí)監(jiān)測(cè)普通用戶堆棧區(qū)的訪問(wèn)地址是否發(fā)生堆棧越界,并在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
同樣地,如圖1中的虛心箭頭所示,當(dāng)所述處理器處于超級(jí)用戶模式時(shí),所述堆棧保護(hù)單元18,用于實(shí)時(shí)監(jiān)測(cè)超級(jí)用戶堆棧區(qū)的訪問(wèn)地址是否發(fā)生堆棧越界,并在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
本發(fā)明實(shí)施例提供的實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器,所述處理器包括指令獲取單元、指令譯碼單元、地址加法器、超級(jí)用戶堆棧指針寄存器、普通用戶堆棧指針寄存器、堆棧上邊界寄存器、堆棧下邊界寄存器和堆棧保護(hù)單元,所述處理器能夠訪問(wèn)的內(nèi)存空間包括指令區(qū)、專(zhuān)屬內(nèi)存區(qū)域、普通用戶堆棧區(qū)和超級(jí)用戶堆棧區(qū)。與現(xiàn)有技術(shù)相比,本發(fā)明能夠在保證現(xiàn)有程序空間以及程序執(zhí)行效率不變的前提下,提供一種通過(guò)硬件實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器。
可選地,所述堆棧上邊界寄存器16,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),將所述堆棧上邊界寄存器中的超級(jí)用戶堆棧區(qū)的上邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值;或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),將所述堆棧上邊界寄存器中的普通用戶堆棧區(qū)的上邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入所述超級(jí)用戶堆棧區(qū)的上邊界值。
可選地,所述堆棧下邊界寄存器17,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),將所述堆棧下邊界寄存器中的超級(jí)用戶堆棧區(qū)的下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的下邊界值;或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),將所述堆棧下邊界寄存器中的普通用戶堆棧區(qū)的下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入所述超級(jí)用戶堆棧區(qū)的下邊界值。
可選地,所述堆棧保護(hù)單元18,用于當(dāng)監(jiān)測(cè)到所述處理器由超級(jí)用戶模式切換至普通用戶模式時(shí),清除超級(jí)用戶模式的堆棧越界使能位,開(kāi)啟普通用戶模式的堆棧越界使能位,實(shí)時(shí)監(jiān)測(cè)普通用戶堆棧區(qū)的訪問(wèn)地址是否超出普通用戶堆棧區(qū)的邊界值,并當(dāng)普通用戶堆棧區(qū)的訪問(wèn)地址超出普通用戶堆棧區(qū)的邊界值時(shí)觸發(fā)堆棧越界報(bào)錯(cuò);
或者,當(dāng)監(jiān)測(cè)到所述處理器由普通用戶模式切換至超級(jí)用戶模式時(shí),清除普通用戶模式的堆棧越界使能位,開(kāi)啟超級(jí)用戶模式的堆棧越界使能位,實(shí)時(shí)監(jiān)測(cè)超級(jí)用戶堆棧區(qū)的訪問(wèn)地址是否超出超級(jí)用戶堆棧區(qū)的邊界值,并當(dāng)超級(jí)用戶堆棧區(qū)的訪問(wèn)地址超出超級(jí)用戶堆棧區(qū)的邊界值時(shí)觸發(fā)堆棧越界報(bào)錯(cuò)。
進(jìn)一步地,所述堆棧保護(hù)單元18,還用于設(shè)置所述普通用戶堆棧區(qū)的邊界值和所述超級(jí)用戶堆棧區(qū)的邊界值,將所述普通用戶堆棧區(qū)的邊界值和所述超級(jí)用戶堆棧區(qū)的邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域。
可選地,所述堆棧保護(hù)單元18進(jìn)行堆棧越界監(jiān)測(cè)所針對(duì)的堆棧讀寫(xiě)指令為所有類(lèi)型的堆棧讀寫(xiě)指令或者部分特定類(lèi)型的堆棧讀寫(xiě)指令。
可選地,所述堆棧上邊界寄存器16和所述堆棧下邊界寄存器17均為通用寄存器或者控制寄存器。
可選地,所述堆棧保護(hù)單元18,用于在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)通過(guò)觸發(fā)異常的方式進(jìn)行堆棧越界報(bào)錯(cuò)。
具體地,堆棧保護(hù)單元監(jiān)測(cè)到堆棧越界后,通過(guò)觸發(fā)異常的方式進(jìn)行報(bào)錯(cuò)。若處理器中異常被使能,正常觸發(fā)與該堆棧越界相對(duì)應(yīng)的異常;若處理器中異常未被使能,則觸發(fā)不可恢復(fù)異常,指示該堆棧越界情況。
可選地,所述堆棧保護(hù)單元18,用于在監(jiān)測(cè)到發(fā)生堆棧越界時(shí)通過(guò)觸發(fā)處理器跳轉(zhuǎn)到特定的堆棧越界處理程序的方式進(jìn)行堆棧越界報(bào)錯(cuò)。
具體地,堆棧保護(hù)單元監(jiān)測(cè)到堆棧越界后,也可以通過(guò)觸發(fā)處理器跳轉(zhuǎn)到特定的堆棧越界處理程序進(jìn)行報(bào)錯(cuò)。在監(jiān)測(cè)到堆棧越界后,不論處理器中異常是否使能,均通過(guò)子程序調(diào)用的方式跳轉(zhuǎn)到對(duì)應(yīng)堆棧越界處理程序,同時(shí)將返回地址保存到鏈接寄存器中,在該越界處理程序執(zhí)行完畢后,處理器通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)到該鏈接寄存器的方式,返回觸發(fā)該堆棧越界的內(nèi)存訪問(wèn)指令的下一跳指令繼續(xù)執(zhí)行。
如圖2所示,為本發(fā)明的實(shí)現(xiàn)堆棧自適應(yīng)保護(hù)的處理器進(jìn)行堆棧自適應(yīng)保護(hù)的工作機(jī)制示意圖,具體描述了處理器在普通用戶模式與超級(jí)用戶模式之間切換時(shí)堆棧保護(hù)單元是如何工作的,具體的工作機(jī)制如下:
1)處理器在a點(diǎn)開(kāi)始一個(gè)程序任務(wù)。
此時(shí),處理器處于普通用戶模式,處理器先從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值和下邊界值至堆棧上邊界寄存器以及堆棧下邊界寄存器中,隨后,處理器開(kāi)啟普通用戶模式的堆棧越界使能位。
此后,如果處理器執(zhí)行堆棧讀寫(xiě)指令,則該堆棧讀寫(xiě)指令以普通用戶堆棧指針寄存器為基地址,對(duì)普通用戶堆棧區(qū)進(jìn)行訪問(wèn)。同時(shí)堆棧保護(hù)單元根據(jù)堆棧上邊界寄存器和下邊界寄存器中設(shè)置的邊界值,對(duì)普通用戶堆棧區(qū)進(jìn)行保護(hù),當(dāng)監(jiān)測(cè)到堆棧越界時(shí)觸發(fā)報(bào)錯(cuò)。
2)處理器運(yùn)行到b點(diǎn)響應(yīng)中斷,中斷需要進(jìn)入超級(jí)用戶模式進(jìn)行處理。
3)處理器運(yùn)行到c點(diǎn),即處理器切換到超級(jí)用戶模式。
此時(shí),處理器清除普通用戶模式的越界檢查使能位,處理器先將所述堆棧下邊界寄存器中的普通用戶堆棧區(qū)的上邊界值和下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入超級(jí)用戶堆棧區(qū)的上邊界值和下邊界值至堆棧上邊界寄存器和堆棧下邊界寄存器中,隨后,處理器開(kāi)啟超級(jí)用戶模式的堆棧越界使能位。
此后,如果處理器執(zhí)行堆棧讀寫(xiě)指令,則該堆棧讀寫(xiě)指令以超級(jí)用戶堆棧指針寄存器為基地址,對(duì)超級(jí)用戶堆棧區(qū)進(jìn)行訪問(wèn)。同時(shí)堆棧保護(hù)單元根據(jù)堆棧上邊界寄存器和下邊界寄存器中設(shè)置的邊界值,對(duì)超級(jí)用戶堆棧區(qū)進(jìn)行保護(hù),當(dāng)監(jiān)測(cè)到堆棧越界時(shí)觸發(fā)報(bào)錯(cuò)。
4)處理器在d點(diǎn)對(duì)中斷進(jìn)行處理,處理完畢后運(yùn)行到e點(diǎn)。
此時(shí),處理器清楚超級(jí)用戶模式的堆棧越界檢查使能位,處理器將所述堆棧下邊界寄存器中的超級(jí)用戶堆棧區(qū)的上邊界值和下邊界值存儲(chǔ)至所述專(zhuān)屬內(nèi)存區(qū)域,并從所述專(zhuān)屬內(nèi)存區(qū)域讀取并寫(xiě)入普通用戶堆棧區(qū)的上邊界值和下邊界值至堆棧上邊界寄存器和堆棧下邊界寄存器中,隨后,處理器開(kāi)啟普通用戶模式的堆棧越界使能位,處理器執(zhí)行中斷返回指令,從超級(jí)用戶模式返回到普通用戶模式。
5)當(dāng)處理器處理完中斷后返回f點(diǎn),該f點(diǎn)處的指令為處理器響應(yīng)中斷的b點(diǎn)處指令的后續(xù)指令,此時(shí)如果處理器執(zhí)行堆棧讀寫(xiě)指令,則該指令以普通用戶堆棧指針寄存器為基地址,對(duì)普通用戶堆棧區(qū)進(jìn)行訪問(wèn)。同時(shí)堆棧保護(hù)單元根據(jù)堆棧上邊界寄存器和下邊界寄存器中設(shè)置的邊界值,對(duì)普通用戶堆棧區(qū)進(jìn)行保護(hù),當(dāng)監(jiān)測(cè)到堆棧越界時(shí)觸發(fā)報(bào)錯(cuò)。
6)處理器運(yùn)行到g點(diǎn),完成a點(diǎn)處開(kāi)始的程序任務(wù)。整個(gè)程序運(yùn)行過(guò)程中,a、b、f、g均為普通用戶模式,用于完成普通的程序任務(wù);c、d、e均為超級(jí)用戶模式,用于完成中斷對(duì)應(yīng)的程序任務(wù),其中點(diǎn)c和e用于進(jìn)行堆棧邊界信息的保存和加載,這兩點(diǎn)運(yùn)行過(guò)程中,會(huì)發(fā)生堆棧指針寄存器與堆棧邊界寄存器中的堆棧上下邊界值分別屬于不同模式的情況,為了保證程序正常運(yùn)行,處理器在c和e點(diǎn)起始處均通過(guò)軟件控制清除堆棧越界檢查使能位,關(guān)閉堆棧越界檢查功能。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。