專利名稱:保護(hù)入口地址的方法
在未來(lái)的芯片卡上,應(yīng)允許可以調(diào)用操作系統(tǒng)功能的第三方的應(yīng)用。為此可能存在如下危險(xiǎn),即該第三方的應(yīng)用包含關(guān)于其它程序段的干擾或破壞企圖。這種可能的侵害有從所述的應(yīng)用出發(fā)不是采用操作系統(tǒng)程序的有效功能指針,而是采用另一入口地址。由此,操作系統(tǒng)的代碼不是按規(guī)定執(zhí)行的,并且可能譬如因錯(cuò)誤重寫存儲(chǔ)器區(qū)而引起數(shù)據(jù)損失。
根據(jù)現(xiàn)有技術(shù)設(shè)計(jì)了一種解決方案,它利用的是進(jìn)入到固定間隔(門)中的預(yù)定地址上。在此,首先必須檢驗(yàn)門地址是否位于模塊所允許的地址范圍之內(nèi)。在結(jié)果肯定的情況下,便跳向該門,然后從那里進(jìn)一步跳躍到原本的功能中。這是有缺陷的,因?yàn)榇颂幈仨殘?zhí)行所計(jì)算出的跳躍,該跳躍在CPU流水線中將導(dǎo)致一個(gè)窺孔。也可選擇在功能的一些預(yù)先處理的程序指令之后延遲地跳躍到所述的功能中。如果在所述功能的開始處引入一個(gè)循環(huán),并且必須持續(xù)地在門處的代碼和調(diào)出的代碼之間來(lái)回跳躍,那么這將會(huì)給編譯程序帶來(lái)很困難的優(yōu)化問(wèn)題。
因此,本發(fā)明任務(wù)在于,創(chuàng)造一種保護(hù)這種類型的入口地址的方法,其中無(wú)須執(zhí)行所計(jì)算的跳躍,由此在CPU指令流水線中不會(huì)出現(xiàn)窺孔。
根據(jù)本發(fā)明,該任務(wù)通過(guò)如下方式解決,即準(zhǔn)許直接跳至允許的入口地址,并且可利用不在同一單個(gè)指令中的數(shù)據(jù)的相關(guān)性來(lái)識(shí)別該允許的入口地址。
在此,編譯程序或鏈接程序通過(guò)組織程序代碼來(lái)確保只有合法的入口地址才滿足該相關(guān)性。譬如可以通過(guò)如下方式來(lái)實(shí)現(xiàn)所述的相關(guān)性,即直接位于入口地址之前或之后的存儲(chǔ)單元包含有相關(guān)數(shù)據(jù)的地址。
為此,一種優(yōu)選的可能性在于,直接位于入口地址之前或之后的存儲(chǔ)單元包含有一個(gè)針對(duì)合法入口地址的保護(hù)目錄內(nèi)的相應(yīng)項(xiàng)的參考。
在此,尤其優(yōu)選的是,在執(zhí)行功能調(diào)用時(shí)自動(dòng)地檢驗(yàn)是否滿足數(shù)據(jù)的相關(guān)性。
特別優(yōu)選的是,在執(zhí)行功能調(diào)用時(shí)自動(dòng)地檢驗(yàn)所述的相關(guān)數(shù)據(jù)是否位于預(yù)定的預(yù)備存儲(chǔ)區(qū)。
只要程序指令不超過(guò)某個(gè)最大數(shù)目n的字節(jié),則可以通過(guò)如下方式應(yīng)用本發(fā)明的另一解決方案,即設(shè)定一種特殊的無(wú)操作代碼,用以避免隨機(jī)的相關(guān)性,并且可以由編譯程序或鏈接程序補(bǔ)充加入該無(wú)操作代碼。
在此,如下做法是尤其優(yōu)選的,即在至少相距n字節(jié)的代碼數(shù)據(jù)之間產(chǎn)生所述的相關(guān)性。
此外,根據(jù)本發(fā)明,所述的入口地址可以通過(guò)加入一個(gè)特殊的、可以不出現(xiàn)在常規(guī)代碼內(nèi)的字節(jié)序列來(lái)進(jìn)行暫存,譬如利用特殊的無(wú)操作代碼。
因此,根據(jù)本發(fā)明,可以通過(guò)直接跳至功能指針的地址來(lái)避免流水線中的窺孔。但是,必須負(fù)責(zé)通過(guò)非局部的代碼相關(guān)性來(lái)標(biāo)出合法的跳躍地址。所述的編譯程序或鏈接程序必須通過(guò)組織程序代碼來(lái)確保只有合法的功能跳躍地址才能滿足該相關(guān)性。在此,“非局部的相關(guān)性”意味著那些可以不位于同一單個(gè)指令內(nèi)的數(shù)據(jù)的相關(guān)性。
因此,譬如下列的優(yōu)選實(shí)施方案是可能的1.與為此而預(yù)備的存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)相關(guān)一種簡(jiǎn)單的實(shí)現(xiàn)方法可以是譬如在直接位于入口地址之前的存儲(chǔ)單元內(nèi)包含相關(guān)數(shù)據(jù)的地址,該相關(guān)數(shù)據(jù)譬如又對(duì)應(yīng)著功能的合法入口地址。在執(zhí)行功能調(diào)用時(shí),可以自動(dòng)地檢驗(yàn)是否滿足該相關(guān)性,以及/或者該相關(guān)數(shù)據(jù)是否位于預(yù)定的預(yù)備存儲(chǔ)區(qū)。該機(jī)理乍一看來(lái)非常近似于迄今的門機(jī)理,但有個(gè)優(yōu)點(diǎn),就是不會(huì)出現(xiàn)所計(jì)算的跳躍,而且可以直接把功能的指令取至流水線的預(yù)取器中。窺孔只有在非法進(jìn)入的故障情況下才出現(xiàn)。
2.與非預(yù)備的存儲(chǔ)區(qū)內(nèi)的程序數(shù)據(jù)相關(guān)。該解決方案的前提條件是,程序指令不超過(guò)某個(gè)最大數(shù)目n的字節(jié)。于是必須排除代碼段中有較長(zhǎng)的數(shù)據(jù)區(qū)。此外,該方法還有一個(gè)前提條件是特殊的無(wú)操作代碼(SNOP),該無(wú)操作代碼從不裝入在常規(guī)代碼中,而只是為了避免隨機(jī)的相關(guān)性而由編譯程序/鏈接程序補(bǔ)充加入。在此還可以區(qū)別為兩種不同的解決方案
a)所述的相關(guān)性是在至少相距n個(gè)字節(jié)的代碼數(shù)據(jù)之間產(chǎn)生的。在此,所述的編譯程序或鏈接程序必須確保通過(guò)引入SNOP中間代碼來(lái)避免代碼中可能的隨機(jī)相關(guān)性。
一種可能的實(shí)現(xiàn)規(guī)定如下直接在所述功能的入口地址之前存在一個(gè)值,該值是接下來(lái)n+m(m≥0,否則是任意的)個(gè)字節(jié)的功能。如果代碼中任何地方都可能隨機(jī)地滿足該相關(guān)性,則編譯程序或鏈接程序必須消除該隨機(jī)的相關(guān)性因?yàn)楦鶕?jù)前提條件在n+m個(gè)字節(jié)的序列中是以至少一個(gè)實(shí)指令結(jié)束,所以在該指令結(jié)束后可以加入一系列SNOP指令,直到所述的功能值發(fā)生變化。在此,該功能可以在某個(gè)界限內(nèi)自由地進(jìn)行選擇。
b)所述的入口地址是通過(guò)加入特殊的字節(jié)序列來(lái)進(jìn)行暫存的,該特殊字節(jié)序列可以不出現(xiàn)在常規(guī)代碼之內(nèi)。此處的例子為OP代碼序列(SNOP)。
因此,根據(jù)本發(fā)明可以通過(guò)非局部的只可能在入口地址處出現(xiàn)的代碼相關(guān)性來(lái)暫存功能的入口地址。
由此有利地避免了所述的門機(jī)理,該門機(jī)理會(huì)產(chǎn)生一種計(jì)算的跳躍,而且在指令流水線中引起一種窺孔。
更具體地講,可直接在入口地址處跳至所述的功能中。接下來(lái)的指令可被裝入到流水線內(nèi),且與驗(yàn)證跳躍地址的對(duì)或錯(cuò)無(wú)關(guān)。由此提高了監(jiān)視功能調(diào)用的效率。
權(quán)利要求
1.保護(hù)入口地址的方法,其特征在于準(zhǔn)許直接跳至允許的入口地址,并且可利用不在同一單個(gè)指令中的數(shù)據(jù)的相關(guān)性來(lái)識(shí)別該允許的入口地址。
2.如權(quán)利要求1所述的方法,其特征在于編譯程序或鏈接程序通過(guò)組織程序代碼來(lái)確保只有合法的入口地址才滿足所述的相關(guān)性。
3.如權(quán)利要求1或2所述的方法,其特征在于通過(guò)如下方式來(lái)實(shí)現(xiàn)所述的相關(guān)性,即直接位于所述入口地址之前或之后的存儲(chǔ)單元包含有相關(guān)數(shù)據(jù)的地址。
4.如權(quán)利要求3所述的方法,其特征在于所述直接位于入口地址之前或之后的存儲(chǔ)單元包含有一個(gè)針對(duì)合法入口地址的保護(hù)目錄內(nèi)的相應(yīng)項(xiàng)的參考。
5.如權(quán)利要求1~4中任一項(xiàng)所述的方法,其特征在于在執(zhí)行功能調(diào)用時(shí)自動(dòng)地檢驗(yàn)是否滿足數(shù)據(jù)的相關(guān)性。
6.如權(quán)利要求5所述的方法,其特征在于在執(zhí)行功能調(diào)用時(shí)自動(dòng)地檢驗(yàn)所述的相關(guān)數(shù)據(jù)是否位于預(yù)定的預(yù)備存儲(chǔ)區(qū)。
7.如權(quán)利要求1或2所述的方法,其特征在于程序指令不超過(guò)某個(gè)最大數(shù)目n的字節(jié);設(shè)定一種特殊的無(wú)操作代碼(SNOP),用以避免隨機(jī)的相關(guān)性,并且可以由編譯程序或鏈接程序補(bǔ)充加入該無(wú)操作代碼。
8.如權(quán)利要求7所述的方法,其特征在于在至少相距n字節(jié)的代碼數(shù)據(jù)之間產(chǎn)生所述的相關(guān)性。
9.如權(quán)利要求1、2或7所述的方法,其特征在于通過(guò)加入一個(gè)特殊的字節(jié)序列來(lái)暫存所述的入口地址,而該字節(jié)序列可以不出現(xiàn)在常規(guī)代碼內(nèi)。
10.如權(quán)利要求9所述的方法,其特征在于采用一種特殊的無(wú)操作代碼(SNOP)作為特殊的字節(jié)序列。
全文摘要
一種高效地保護(hù)計(jì)算機(jī)程序中的入口地址的方法,其中準(zhǔn)許直接跳至允許的入口地址,并且可以利用不在同一單個(gè)指令中的數(shù)據(jù)的相關(guān)性來(lái)識(shí)別該允許的入口地址。在此,可以由編譯程序或鏈接程序通過(guò)組織程序代碼來(lái)確保只有合法的入口地址才滿足所述的相關(guān)性。
文檔編號(hào)G06F12/14GK1323413SQ99811943
公開日2001年11月21日 申請(qǐng)日期1999年10月1日 優(yōu)先權(quán)日1998年10月9日
發(fā)明者C·梅, J·弗雷瓦爾德, O·布里克瑟爾 申請(qǐng)人:因芬尼昂技術(shù)股份公司