TWI801505B - 帶鏈結分支指令的分支目標變體 - Google Patents
帶鏈結分支指令的分支目標變體 Download PDFInfo
- Publication number
- TWI801505B TWI801505B TW108105733A TW108105733A TWI801505B TW I801505 B TWI801505 B TW I801505B TW 108105733 A TW108105733 A TW 108105733A TW 108105733 A TW108105733 A TW 108105733A TW I801505 B TWI801505 B TW I801505B
- Authority
- TW
- Taiwan
- Prior art keywords
- instruction
- branch
- target
- address
- chained
- Prior art date
Links
- 238000012545 processing Methods 0.000 claims abstract description 68
- 230000004044 response Effects 0.000 claims abstract description 52
- 230000008859 change Effects 0.000 claims abstract description 36
- 230000001960 triggered effect Effects 0.000 claims abstract description 23
- 238000004590 computer program Methods 0.000 claims description 9
- 238000003672 processing method Methods 0.000 claims 1
- 230000006870 function Effects 0.000 description 20
- 238000000034 method Methods 0.000 description 19
- 230000006399 behavior Effects 0.000 description 13
- 101100108191 Vibrio parahaemolyticus serotype O3:K6 (strain RIMD 2210633) add gene Proteins 0.000 description 7
- 230000001419 dependent effect Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 238000013519 translation Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 101150060298 add2 gene Proteins 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)
Abstract
一種設備2,包括指令解碼器6及處理電路系統4。該指令解碼器6支援分支指令,該分支指令用於觸發程式流程到目標地址的指令之非順序改變,包含:帶鏈結分支指令,為程式流程的後續返回設置返回地址;及至少一個分支指令的目標檢查類型,當採用該分支時,當在該目標地址處的該指令係除了至少一個分支目標指令的允許類型之外的指令時,觸發錯誤處置回應。對於至少一個分支指令的目標檢查類型的至少一子集而言,該帶鏈結分支指令的一分支目標變體為分支目標指令的允許類型。
Description
本技術涉及資料處理之領域。
分支指令是當從給定程式代碼執行指令時,用於觸發程式流程的非順序改變的指令。一些分支可為靜態分支,其目標地址總為固定的,或藉由與當前指令地址的固定偏移決定。然而,其他分支為資料相關分支,其中(若採用分支)標識在分支之後欲執行的指令之目標地址係取決於從記憶體讀取或藉由先前指令生成的資料。舉例而言,資料相關分支可用於確保某些功能取決於程式的早期部分的成果,而有條件地執行。
針對處理器的攻擊的一種形式可能為試圖破壞資料,它藉由資料相關的分支指令控製程式流程的方向,以便欺騙分支指令而分支到在目標地址處的指令,該指令並非為程式代碼的作者之意圖。此類漏洞攻擊可允許攻擊者將合法指令的部分串在一起,該等部分為欲執行的正確程式代碼的一部分,但與預期序列的順序不同。此類攻擊可能會妨礙程式正常運行,對執行程式的處理器造成其他不良影響,或繞過某些安全措施(如密碼檢查)。
至少一些範例提供了一種設備,包括:用於解碼指令的指令解碼器;及處理電路系統系統,用於回應於藉由指令解碼器解碼的指令以進行資料處理;其中:回應於分支指令,指令解碼器配置成,控制處理電路系統以觸發程式流程到在目標地址處的指令的非順序改變;當回應於帶鏈結分支(branch-with-linked)指令,而觸發程式流程的非順序改變時,指令解碼器配置成,控制處理電路系統為程式流程的後續返回設置返回地址;當回應於至少一個分支指令之目標檢查類型,而觸發程式流程的非順序改變時,當在目標地址處的指令係除了至少一個分支目標指令的允許類型之外的指令時,指令解碼器配置成,控制處理電路系統以觸發錯誤處置回應;及對於至少一個分支指令的目標檢查類型的至少一子集而言,至少一個分支目標指令的允許類型包含帶鏈結分支指令的分支目標變體。
至少一個範例提供一種資料處理的方法,該方法包括以下步驟:回應於分支指令,觸發程式流程到在目標地址處的指令的非順序改變;當回應於帶鏈結分支指令,而觸發程式流程的非順序改變時,為隨後返回程式流程設置返回地址;及當回應於至少一個分支指令的目標檢查類型,而觸發程式流程的非順序改變時,若在目標地址處的指令係除了至少一個分支目標指令的允許類型之外的指令時,觸發錯誤處置回應;其中,對於至少一個分支指令之目標檢查類型的至少一子集而言,至少一個分支目標指令的允許類型包含帶鏈結分支指令的分支目標變體。
至少一些範例提供一種電腦程式,用於控制一主機資料處理設備,以提供用於執行目標程式代碼的指令一指令執行環境,包括:指令解碼程式邏輯,用於解碼目標程式代碼的指令;及處理程式邏輯,以回應於藉由該指令解碼程式邏輯解碼的指令執行資料處理;其中:回應於分支指令,指令解碼程式邏輯配置成,控制處理程式邏輯以觸發程式流程到在目標地址處的指令的非順序改變;當回應於帶鏈結分支指令,而觸發程式流程的非順序改變時,指令解碼程式邏輯配置成,控制處理程式邏輯以為程式流程的後續返回設置返回地址;當回應於至少一個分支指令的目標檢查類型,而觸發程式流程的非順序改變時,指令解碼程式邏輯配置成,當在目標地址處的指令係除了至少一個分支目標指令的允許類型之外的指令時,控制處理程式邏輯以觸發錯誤處置回應;及對於至少一個分支指令的目標檢查類型的至少一子集而言,至少一個分支目標指令的允許類型包含帶鏈結分支指令的分支目標變體。
可提供儲存媒體以儲存上述電腦程式。儲存媒體可為非暫時性儲存媒體。
一種防止攻擊的技術,旨在控制用於控制分支指令提供的程式流程的資料,可提供一指令解碼器,該指令解碼器支援至少一個分支目標指令的允許類型,可用於標記程式的安全分支目標點,程式代碼的作者意圖將其作為分支的合法目標。當回應於至少一個分支指令之目標檢查類型,而觸發程式流程的非順序改變時,處理電路系統可檢查目標地址處的指令是否為至少一個分支目標指令的允許類型。當目標地址處的指令為除了至少一個分支目標指令的允許類型之外的指令時,則可觸發錯誤處置回應。舉例而言,錯誤處置回應可用訊號通知異常,或儲存指示已偵測到故障的狀態資訊。以此種方式,因為除了由分支目標指令的允許類型標記的點之外,不再可能分支到程式中的任意點,該架構可提供用於偵測何時存在程式流程的意外改變的機制,因此可使得上述形式的攻擊變得更加困難。
一種分支指令類型的為帶鏈結分支指令。當回應於帶鏈結分支指令,而觸發程式流程的非順序改變時,指令解碼器可控制處理電路系統為程式流程的後續返回設置返回地址。舉例而言,返回地址可儲存到特定暫存器,舉例而言,稱為「鏈接暫存器」。隨後的返回分支令可讀取返回地址,然後觸發程式流程的改變回到藉由返回地址表示的地址。此功能對於使用帶鏈結分支指令調用(call)函數非常有用,並且隨後一旦功能完成,則將處理返回到程式的先前執行的部分。因為返回地址可用於有效地記住自程式調用函數的部分,使用帶鏈結分支指令可使程式內的多個不同位置調用相同的函數。
在帶鏈結分支指令令之後,藉由納入隨後分支目標指令的允許類型,可對帶鏈結分支指令實現對上述討論的攻擊形式的保護。然而,在此種情況下,程式中的指令數量增加,並且由於帶鏈結分支指令相對常見,這可能會使整個代碼量大量增加。舉例而言,就帶鏈結分支指令的平均使用量及平均長度之代碼而言,在每個帶鏈結分支指令之後納入分支目標指令,估計可使典型程式中指令的數量增加大約6%。增加給定程式所需的代碼大小,會導致快取記憶體使用效率降低與管道利用率降低,從而影響效能。
在上面討論的技術中,可提供帶鏈結分支指令的分支目標變體,對於至少一個分支指令的目標檢查類型的至少一子集而言,其被視為至少一個分支目標指令的允許類型之一。因此,因為帶鏈結分支指令本身可充當分支目標指令的允許類型般,在帶鏈結分支指令之後不必納入單獨的分支目標指令,以便程式流程回到帶鏈結分支指令的非順序變化可被視為有效入口點。此設計利用後述事實:由於帶鏈結分支指令的連接及返回行為,帶鏈結分支指令之後的指令幾乎總被預期為有效的分支目標點,因此單獨指示顯式分支目標指令可為多餘的。相反地,帶鏈結分支指令可隱含地表現為分支目標指令的允許類型本身。這有助於減少總代碼量,從而改善指令快取及指令處理管道的效能。
回應於帶鏈結分支指令的返回地址的設置,可根據帶鏈結分支指令是否為分支目標變體而變化。回應於除了分支目標變體之外的帶鏈結分支指令,處理電路系統可將返回地址設置成,順序上跟隨帶鏈結分支指令的下一指令的地址。另一方面,回應於帶鏈結分支指令的分支目標變體,可將返回地址設置成帶鏈結分支指令本身的分支目標變體的地址。因為後續返回分支將分支回到相同的帶鏈結分支指令,這意味著帶鏈結分支指令的分支目標變體可充當分支目標指令。雖然此種行為意味著,帶鏈結分支指令的分支目標變體及非分支目標變體以不同方式設置返回地址,但實際上除了返回分支本身外,很少有返回地址被函數內的任何指令引用。這意味著,函數內的返回地址的非決定性定義(地址根據函數藉由分支係目標變體調用、或藉由帶鏈結分支指令的非分支目標變體而變化)不太可能導致重大問題(在任何情況下,需要在函數體內使用返回地址的決定性定義的代碼,可在必要時以其他方式將地址作為附加函數參數傳遞)。實際上,大多數代碼可藉由允許帶鏈結分支指令的變體,將返回地址設置成自己的地址,因而使自身充當允許的分支目標地址,從而減少代碼量。
帶鏈結分支指令的分支目標變體的行為,可根據程式流程為順序地或非順序地傳遞到帶帶鏈結分支指令而變化。當程式流程非順序地從至少一個分支指令之目標檢查類型,傳遞到帶鏈結分支指令的分支目標變體時,則可抑制帶鏈結分支指令的分支目標變體相關聯程式流程的任何非順序變化,使得在帶鏈結分支指令的分支目標變體之後執行的下一條指令,可直接為從帶鏈結分支指令開始依次執行的下一條指令。此認知到,著當程式流程從至少一個分支指令之目標檢查類型非順序地傳遞到帶鏈結分支指令的分支目標變體時,則這意味著藉由帶鏈結分支指令表示的分支通常已經執行了指令,且現在程式程正流返回到帶鏈結分支指令,其中帶鏈結分支指令充當分支目標指令。
另一方面,當程式流程順序傳遞到帶鏈結分支指令的分支目標變體時(即,在分支被採用之前第一次遇到帶鏈結分支指令),則可允許程式流程的非順序改變(若採用-注意是否採用分支亦可能取決於其他條件資訊)。此外,在並非所有分支皆被視為分支指令之目標檢查類型的情況下,當程式流程從非分支指令之目標檢查類型非順序地傳遞到分支目標變體或帶鏈結分支指令時,則仍然可允許與帶鏈結分支指令相關的程式流程的非順序改變。
換言之,當順序地傳遞到帶鏈結分支指令的分支目標變體、或分支到來自分支的帶鏈結分支指令的分支目標變體時,該分支不需要檢查目標處的指令地址,以確認是否為分支目標指令,帶鏈結分支指令可視為標準的帶鏈結分支指令,(若滿足任何其他條件要求)其確實觸發程式流程的非順序改變。另一方面,當程式流程非順序地從分支傳遞到帶鏈結分支指令的分支目標變體時,該分支確實需要檢查目標地址處的指令是否是分支目標指令的允許類型,則該指令視為分支目標指令,可在架構級別提供無操作行為,從而抑制與該指令相關的任何分支(程式流程的非順序改變)。同一指令的此種雙重行為,藉由了避免為這兩個目的提供單獨的指令而減少了代碼量。
在本申請案中,術語「分支指令」可意旨為能觸發程式流程的非順序改變的任何指令。此可包含明示定義為分支的某些類型的分支指令,例如,使用指令操作碼將指令標記為分支指令。然而,分支指令亦可為另一種類型的指令,具有表示某種其他類型的處理操作的操作碼,但指定了作為其目的地暫存的暫存器,該暫存器提供程式計數器,控制程式中到達的程式流程的當前點。舉例而言,分支指令可為算術指令、邏輯指令、加載指令或暫存器移動指令(用於將資料值從一個暫存器移動至另一個暫存器的指令),其指定程式計數器暫存作為其目的地暫存器。
在一些實現中,所有分支指令可視為至少一個分支指令之目標檢查類型,針對此分支目標,對分支目標地址處的指令執行檢查,並且若目標地址處的指令並非允許的目標指令類型之一時,觸發錯誤處置回應。然而,在其他範例中,對於某些分支指令之目標檢查類型,可能僅需檢查分支目標地址處的指令,並且對於其他類型的分支指令而言,可省略該檢查。舉例而言,因為不可能藉由修改分支控制資料來破壞總是分支到相同的位置的靜態分支,此等分支(使用固定的絕對目標地址或相相對目標地址,此相對目標地址係使用不依賴從程式的早期部分導出的資料的偏移量之分支指令的地址而相對地定義)可能不需要檢查目標地址處的指令。因此,在某些情況下,可僅對資料相關分支執行目標地址處的指令檢查,其目標地址取決於從先前指令導出的資料。
在一些實踐中,對所有分支指令之目標檢查類型,帶鏈結分支指令的分支目標變體可視為分支目標指令的允許類型。然而,在其他範例中,對分支指令之目標檢查類型的特定(受限)子集,帶鏈結分支指令的分支目標變體可為分支目標指令的允許類型。舉例而言,若目標地址處的指令為帶鏈結分,支指令的分支目標變體,僅有可用於分支到儲存在鏈結暫存器中的返回地址的分支指令,可被允許分支到帶鏈結分支指令的分支目標變體,且其他不分支到返回分支地址,則仍然可觸發錯誤處置回應。
因此,在一些情況下,對於分支指令的第一目標檢查類型而言,帶鏈結分支指令的分支目標變體可為至少一個分支目標指令的允許類型之一,而對於分支指令的第二目標檢查類型而言,帶鏈結分支指令的分支目標變體不是至少一個分支目標指令的允許類型之一。藉由限制分支指令之目標檢查類型的子集,其中帶鏈結分支指令的分支目標變體為分支目標指令的允許類型的有效類型,這減少了攻擊者以生成代碼的程式或編譯器非意圖的方式重指向程式流程的範圍,從而提高了安全性。
在一些情況下,可定義帶鏈結分支指令的多個分支目標變體。對於分支指令之目標檢查類型的不同子集類型而言,帶鏈結分支指令的不同變體可視為分支目標指令之一允許類似。舉例而言,對於分支指令之目標檢查類型的第一子集而言,帶鏈結分支指令的第一分支目標變體可為分支目標指令的之至少一個允許類型中之一者,並且對分支指令之目標檢查類型之第二(不同)子集而言,帶鏈結分支指令的第二分支目標變體可為分支目標指令之目標檢查類型之該允許類型。
藉由更具體地說明允許哪種類型的分支指令之目標檢查類型,分支到帶鏈結分支指令的給定變體,這又將減少攻擊者觸發不期望行為的範圍。舉例而言,分支指令之目標檢查類型之一者可為專用返回分支指令,返回分支指令總是分支到由先前帶鏈結分支指令建立的鏈結暫存器中的地址。
某些實踐可能支援返回分支指令的變體,對於該專用返回分支指令而言,該返回分支指令僅被視為的分支目標指令的允許類型,但對於接受除了返回地址之外的任意目標地址的其他更常見類型的分支而言,其並非分支目標指令的允許類型之一。
另一方面,一些程式代碼可使用一般類型的分支,該分支指定鏈結暫存器作為其目標地址的源暫存器,以便在處理函數之後控制返回分支,並且在此種情況下,可能希望使得帶鏈結分支指令的分支目標變體,亦成為此種一般分支的允許分支目標指令之一。
藉由定義僅作為返回分支的有效分支目標的第一分支目標變體,及可允許藉由返回分支或更一般形式的分支作為目標的第二分支目標變體,此舉允許編譯器或程式員根據所需的安全級別選擇他們希望使用的變體。因為不再可能將一般分支用作返回到返回地址的分支,第一種變體可能更安全,但可能需要更嚴格的編程要求,而因為第二種變體可能意味實際上未意圖應用返回的不同的一般分支,可有效地分支到帶鏈結分支指令的位置,著第二種變體可能允許更鬆散的編程實踐,但可亦有一些額外的漏洞。因此,通過支援不同形式的帶鏈結分支指令,支援分支指令之目標檢查類型的不同子集有效地分支到帶鏈結分支指令,此舉為程式員提供了安全性以便於編程的簡易性。
在一些實踐中,帶鏈結分支指令的分支目標變體可具有與帶鏈結分支指令的另一變體不同的編碼,其不被視為不同類型的分支指令之一。而且,可使用不同的指令編碼定義上述的帶鏈結分支指令的第一/第二分支目標變體。
然而,在其他範例中,帶鏈結分支指令的分支目標變體可具有與帶鏈結分支指令的另一變體相同的編碼,該帶鏈結分支指令並非分支目標指令的允許類型,或第一/第二分支目標變體可具有相同的編碼。在此種情況下,指令解碼器或處理電路系統可基於除了給定帶鏈結分支指令的指令編碼之外的至少一個參數,來決定給定帶鏈結分支指令的特定變體(例如,其為分支目標變體還是另一個、非分支目標變體,或是否為第一分支目標變體或第一分支目標變體)。
舉例而言,至少參數可為儲存在配置暫存器中的配置參數。這可更容易地編寫可同時在保留系統及較新機器上正確操作的代碼,保留系統的架構沒有支援帶鏈結分支指令的分支目標變體的功能,而較新機器則被編寫來回應於如上述的帶鏈結分支指令的分支目標變體,該帶鏈結分支指令的分支目標變體具有不同返回地址設置行為及依非順序地與順序地傳遞程式流程到分支目標變體的的不同行為。藉由對帶鏈結分支指令的分支目標變體與非分支目標變體使用完全相同的編碼,可在兩種裝置上執行相同的代碼。然而,確實支援分支目標變體的功能的設備可具有配置暫存器,該配置暫存器具有指定分支目標變體功能已被啟動的參數。舉例而言,可在保留系統中使用配置暫存器,將備用位元硬連線(hard-wire)默認設置成固定值,使得所有設備能默認將所有帶鏈結分支指令視為非分支目標變體。但在較新的裝置中,配置暫存器的此位元可設置成不同的值,以指示應該將帶鏈結分支指令視為分支目標變體,以便它們可不需要單獨編碼的分支目標指令,合法地被返回分支作為目標。
能提供可決定帶有鏈結分支指令的變體的參數的其他範例。在一個範例中,至少一個參數可包括帶鏈結分支指令的指令地址。舉例而言,程式代碼的某些部分的帶鏈結分支指令可視為分支目標變體,而在程式代碼的其他部分中,帶鏈結分支指令可視為非分支目標變體。取決於特定代碼部分所需的安全級別,此舉可能允許代碼的某些部分具有比其他部分更受限的允許分支目標指令集。
而且,控制帶鏈結分支指令的行為的參數可為給定分支指令的目標檢查類型的指令地址,使得程式流程非順序地傳遞到給定帶分支鏈接指令。換言之,使程式流程傳遞返回給定帶鏈結分支指令之返回分支的地址,可決定帶鏈結分支指令的變體,例如,該指令是否被視為第一分支目標變體(可由分支類型的第一子集有效地標定)或第二分支目標變體(可以由分支類型的第二子集有效地標定)。舉例而言,在較舊的代碼儲存在第一地址範圍、並且較新的代碼儲存在第二地址範圍的情況下,此舉可能為有用的。較舊的代碼可使用更廣泛的分支指令類型以用於返回分支,因此從舊代碼的地址範圍中的分支指令,分支到的帶鏈結分支指令,可能較佳地為允許更寬的分支類型子集之變體,以有效地標定帶鏈結分支指令。另一方面,對於編譯為使用更受限的分支類型子集之較新的代碼,以執行返回分支的而言,藉由將帶鏈結分支指令解釋為不同的變體,充當更有限的分支類型子集的有效分支目標指令,則可改善安全性。因此,藉由選擇基於分支到帶鏈結分支指令的地址之變體,此舉可允許在與遺留代碼的兼容性以及對較新的代碼的增加的安全性之間更好地平衡。
藉著此種方法,若在遇到給定分支指令的目標檢查類型之後,但在處理給定帶鏈結分支指令之前採用異常,則可記錄資訊以幫助決定給定帶鏈結分支指令的變體。舉例而言,該資訊可記錄為在採用異常時捕獲的狀態的一部分,或藉由修改異常返回地址的一個或更多個位元(例如,地址的最高有效或最低有效部分中的未使用位元)來記錄。這意味著當從異常返回時,在異常之前觸發的分支指令的相關屬性,不會丟失,因此可在異常之後的恢復處理中,決定帶鏈結分支指令的適當行為。
圖1示意性地示出了資料處理設備2的範例。應當理解,這僅為設備的部件子集的高階表示,並且設備可包含未示出的許多其他部件。設備2包括處理電路系統4,用於回應於由指令解碼器6解碼的指令執行資料處理。指令解碼器6對從指令快取8取出的指令進行解碼,以產生控制訊號10,控制訊號10用於控制處理電路系統4以執行由指令表示的相應處理操作。處理電路系統4可包含一個或更多個執行單元,執行單元用於對儲存在暫存器14中的值執行操作,以產生要寫回暫存器的結果值。舉例而言,執行單元可包含用於執行算術運算或邏輯運算的計算/邏輯單元(ALU)、用於使用浮點操作數執行運算的浮點單元、及/或用於對包含多個獨立資料元素的操作數執行向量運算。處理電路系統亦包含儲存器存取單元(或加載/儲存單元)15,用於控制暫存器14與記憶體系統之間的資料傳輸。在該範例中,記憶體系統包含指令快取8、級別1資料快取16、在資料與指令之間共享的級別2快取17,及主要記憶體18。應當理解,其他快取層次結構亦為可能的-此僅為一個範例。提供記憶體管理單元(MMU)20,用於提供地址轉換功能以支援藉由加載/儲存單元15觸發的記憶體存取。MMU具有轉譯後備緩衝器(TLB)22,用於快取儲存在記憶體系統16、17、18中的頁表的條目子集。每個頁表條目可為對應的地址頁面提供地址轉換映射,並且亦可指定存取控制參數,如指定頁面係唯讀區域或可讀寫之存取權限,或指定哪個權限級別可存取該頁面之存取權限。
圖2示出了帶鏈結分支指令的處理範例。在圖2中,帶鏈結分支指令為指令的暫存器指定形式,指定了一源暫存器Xn,當採用分支時,源暫存器Xn指示程式流程將指向的指令的目標地址。應當理解,在其他範例中,目標地址可由在帶鏈結分支指令的指令編碼中(而非在暫存器中)指定的立即值來定義。立即值或暫存器值可將目標地址標識為絕對地址、或相對值,該相對值標識為用於計算相對於帶鏈結分支指令的地址的目標地址。因此,可提供編碼目標地址的一系列方式。在圖2與隨後的示意性範例中,帶鏈結分支指令為無條件分支,無條件地在觸發目標地址處的指令處的程式流程之非順序改變。然而,可取決於先前指令的結果,本技術亦可應用於條件分支,其中處理電路系統根據暫存器14中表示的源操作數或條件狀態代碼,決定是否採用分支。
與其他類型的分支不同,對於帶鏈結分支指令而言,除了程式流程的改變之外,當採用分支時,暫存器14內提供的鏈結暫存器亦用根據分支鏈接指令的地址決定的返回地址更新。對於圖2所示的帶鏈結分支指令的非分支目標變體,鏈結暫存器中的返回地址設置成下一條指令的地址,隨後依次來自帶鏈結分支指令。舉例而言,若連續指令的地址之間的偏移量為4,則鏈結暫存器的返回地址可設置成#add1+4,其中#add1為帶鏈結分支指令的地址。當執行帶鏈結分支指令時,該執行帶鏈結分支指令會分支到在目標地址處的某些功能代碼(在此範例中為#add2)。當遇到後續的返回分支指令(RET)時,則為觸發一個返回分支到指令,該指令的地址被指示為鏈結暫存器中的返回地址,在此範例中,該指令使處理指向添加指令ADD(在地址處#add1+4)跟隨帶鏈結分支指令BLR。儘管圖2顯示了專用類型的返回分支指令RET,但藉由將鏈結暫存器指定為定義分支目標地址之源暫存器,亦可使用更一般形式的分支指令分支到鏈結暫存器中的地址。
圖3圖示了使用分支目標指令(BTI)來防止意圖破壞返回地址的攻擊。舉例而言,當進行嵌套函數調用時,由帶鏈結分支指令設置的返回地址可放在堆疊器上。當返回地址於堆疊器上時,攻擊者可能能夠破壞堆疊器上的資料,將返回地址更改為與帶鏈結分支指令最初預期的值不同的值,以試圖欺騙處理器分支到程式的不同部分,而並非程式員或編譯器意圖編寫的正在執行的代碼。一些分支可為目標檢查分支指令,處理器為其檢查分支的目標地址處的指令是否為分支目標指令(BTI)。此舉可允許程式員/編譯器用分支目標指令標記安全分支目標點,因此可將其他可能不安全的位置的分支偵測為錯誤,觸發錯誤處置回應,如發訊號通知故障或異常。注意到帶鏈結分支指令本身及返回分支指令皆可視為目標檢查指令,以便功能代碼的第一條指令,在帶鏈結分支指令的目標地址處執行,並且作為返回分支的目標指令的帶鏈結分支指令之後的下一條指令,需為分支目標指令(BTI),以避免錯誤處置回應。
此技術可用於防範安全漏洞。然而,若每個帶鏈結分支指令必須跟隨分支目標指令,則將增加程式代碼中的指令總數,從而對記憶體、快取及管道利用率提出更高的要求。
圖4圖示了使用帶鏈結分支指令(BLRTI)的分支目標變體來幫助降低代碼密度。應當理解,藉由具有不同的指令編碼,可將BLRTI指令與圖2的BLR指令區分開(例如,不同的指令操作碼,或指定特定變體的指令編碼的另一個參數),或可藉由一些其他資訊來區分,如儲存在配置暫存器中的配置參數,或基於帶鏈結分支指令本身的地址,或基於分支到帶鏈結分支指令的分支的地址。
帶鏈結分支指令的分支目標變體具有雙重功能。關於控制流程到帶鏈結分支指令的順序改變,或控制流程的非順序改變到來自分支的帶鏈結分支指令,不需要檢查目標地址處的指令是否為分支目標指令,帶鏈結分支指令的分支目標變體表現為一般的帶鏈結分支指令,因此若要採用分支並觸發設置返回地址,會觸發將控制流程更改到在分支地址處的指令。與圖2及圖3中所示的非分支目標變體不同,返回設置成帶鏈結分支指令的地址#add1,而非以下指令的地址#add1+4。這確保了當採用分支並且功能代碼完成時,返回分支將分支回到帶鏈結分支指令本身而非分支到下一條指令。
在如此的返回分支上,這是藉由資料相關分支觸發的帶鏈結分支指令的分支目標變體的控制流程的非順序變化,或需要檢查目標地址處的指令是否為分支目標指令的其他分支,具有帶鏈結鏈接指令的分支目標變體視為分支目標指令BTI。因此,由於與帶鏈結分支指令相關的分支被抑制,處理轉移到帶鏈結分支指令之後的下一順序指令。因此,藉由允許相同的指令充當帶鏈結分支指令並且標記有效分支點的分支目標指令,此舉避免了在帶鏈結有分支隨後需要顯式BTI指令。由於帶鏈結分支指令在程式代碼中非常常見,因此該技術在消除大量指令時非常有用-例如,對於某些常見的處理工作負載,預估可消除6%的指令。
圖5為一流程圖,示出了藉由處理器對目標檢查分支指令的處理過程。在步驟40,指令解碼器6解碼(除了帶鏈結分支指令之外的)目標檢查分支指令。帶鏈結分支指令的處理將在下面描述的圖6中單獨討論。在一些情況下,所有分支指令可被認為是分支指令的目標檢查類型。或者,只有某些類型的分支可被認為是目標檢查分支指令。舉例而言,取決於先前指令中指定的資料,若分支指令為資料相關分支,則指令解碼器6可決定分支指令為目標檢查分支。
在步驟42,處理電路系統4決定或預測是否應該採用分支。通常為處理器提供分支預測器,用於在實際知道分支的結果之前,是否可能採用預測分支,以便在解析分支的結果之前可取得、解碼及執行後續指令。若分支預測結果不正確,則處理可回溯到分支點,隨後以正確的分支結果恢復。若決定或預測不採用分支,則在步驟44處理下一順序指令而不採用分支。另一方面,若預測或決定採用分支,則在步驟46,指令解碼器6控制處理電路系統4以決定分支的目標地址處的指令,是否為分支目標指令的允許類型。允許哪種類型的分支目標指令可取決於正在執行的分支的特定類型,或可取決於其他參數,如配置暫存器中的配置值,該配置值可配置處理器的特定行為。若分支的目標地址處的指令並非分支目標指令的允許類型之一,則在步驟48,觸發錯誤處置回應。錯誤處置回應可為發出故障或異常的訊號,可觸發異常處置程式來處置故障並且,舉例而言,將其報告給使用者。另一方面,若在分支的目標地址處的指令為分支目標指令的允許類型,則在步驟50處理電路系統4可允許在分支之後,繼續處理而不觸發錯誤處置回應。此種方法確保分支只能分支到代碼中的某些預定位置,以限制攻擊者破壞分支控制資料的範圍,以非預期的方式將代碼段串在一起。
圖6為一流程圖,圖示了帶鏈結分支指令的處理過程。在步驟60,指令解碼器解碼帶鏈結分支指令。在步驟62,指令解碼器6決定帶鏈結分支指令是否為分支目標變體。帶鏈結分支指令的變體可從指令編碼決定,舉例而言,從指令操作碼或從編碼的另一個字段決定,該字段指定具有帶鏈結分支指令指示的特定變體之值。或者,指令解碼器6可從儲存在暫存器庫14中之配置暫存器中的配置值決定變體。此外,帶鏈結分支指令的變體可取決於帶鏈結分支指令的地址,或取決於分支到帶鏈結分支指令的先前分支的地址。在另一範例中,若自從執行前一分支以來剛發生異常,則可根據在異常發生時,保存的異常狀態資訊來決定定義早期分支的屬性的資料,該屬性決定帶鏈結分支指令的變體、或從異常返回地址的某些位元來決定,該返回地址指示處置異常後,處理將從中恢復的地址(基於前一分支的屬性,該屬性決定後續的帶鏈結分支指令的變體,此等位元在獲取異常時已被修改)。
如果帶鏈結分支指令並非分支目標變體,則在步驟64決定或預測是否要採用分支。若否,則處理在步驟66進行到從帶鏈結分支指令依序地後續下一指令,而不進行分支。若採用分支,則在步驟68,指令解碼器6控制處理電路系統4將鏈結暫存器中的返回地址,設置成從帶鏈結分支指令依序地後續下一指令的地址。在步驟70,控制程式流程以分支到在帶鏈結分支指令的目標地址處的指令。分支目標地址可從藉由帶鏈結分支指令指定的暫存器值決定,或從立即值決定,並且可定義為絕對地址或相對於程式計數器定義的相對地址。
在步驟72,指令解碼器決定帶鏈結分支指令是否為分支指令的目標檢查類型。若否,則在步驟74,簡單地允許在分支之後繼續處理。然而,若帶鏈結分支指令為分支指令的目標檢查類型,則在步驟76,指令解碼器6控制處理電路系統4,以決定分支的目標地址處的指令是否為分支目標指令的允許類型。若否,則在步驟78,以與圖5的步驟48相同的方式觸發錯誤處置回應,而若目標地址處的指令為分支目標指令的允許類型,則在步驟74在分支之後繼續處理。哪些類型的指令被視為帶鏈結分支指令之分支目標指令的允許類型,可能因實踐而異。在一些情況下,一般分支目標指令BTI可視為任何分支類型的允許分支目標指令。在其他情況下,可提供某些分支類型特定的分支目標指令,其可僅被某些類型的分支有效地標定。
若在步驟62,帶鏈結分支指令為指令的分支目標變體,則在步驟80,基於來自分支指令的目標檢查類型的分支,決定控制流程是否已經非順序地傳遞到帶鏈結分支指令。若否,則在步驟81,決定或預測是否採用分支。若否,則處理在步驟66進行到接下來的指令,接著從帶鏈結分支指令開始,而不進行分支。若採用分支,則在步驟82,將後續返回分支的返回地址設置成等於帶鏈結分支指令本身的地址,且接著處理進行到步驟70,其中以與上述相同的方式執行步驟70到78。因此,在程式流程到帶鏈結分支指令的分支目標變體的順序改變,或從非為目標檢查類型的分支的程式流程到分支目標變體的非順序改變時,呼叫(invoke)帶鏈結分支行為,但並非將返回地址重置為下一條指令的地址,如步驟68,而是將地址設置成等於帶鏈結分支指令的地址,以便後續返回分支將處理返回帶鏈結分支指令,以便其可作為分支目標指令。
若在步驟80,已決定控制流程從分支指令的目標檢查類型非順序地傳遞到帶鏈結分支指令(如資料相關分支,可包含返回分支指令RET或指定鏈結暫存器作為其定義目標地址的源暫存器的一般形式的分支指令),則該方法前進到步驟84。在步驟84,指令解碼器6或處理電路系統4決定帶鏈結分支指令的分支目標變體是否為用於分支之分支目標指令的允許類型,其致使控制流程傳遞到帶鏈結分支指令。若否,則在步驟86觸發錯誤處置回應,類似於在步驟78觸發的錯誤處置回應。然而,若鏈結分支指令為相關分支的分支目標指令的允許類型,則在步驟88抑制錯誤處置回應。與帶鏈結分支指令相關的分支亦被抑制,此乃因為分支已被執行一次並且在返回分支處理之後,應當從帶鏈結分支指令繼續順序地處理。因此,允許繼續處理從帶鏈結分支指令順序執行的指令。在步驟84,可取決於致使處理被再定向到帶鏈結分支指令的特定類型的分支,決定帶鏈結分支指令是否為分支目標指令的允許類型。舉例而言,帶鏈結分支指令的一種類型的分支目標變體可僅為用於專用返回分支指令RET的有效分支目標指令,而具有帶鏈結分支指令的另一變體可為用於更一般分支的分支目標指令的允許類型。
圖7例示可使用的模擬器實施方式。雖然較早描述的實施例就用於操作支援所關心的技術的特定處理硬體之設備及方法而言實施本發明,但亦可能根據本文所描述之實施例提供藉由電腦程式之使用實施的指令執行環境。在此類電腦程式提供硬體架構之基於軟體之實施方式的範圍內,該等電腦程式通常稱為模擬器。各種模擬器電腦程式包括仿真器(emulator)、虛擬機、模型,及二進制翻譯器,包括動態二進制翻譯器。通常,模擬器實施方式可在主機處理器130上運行,該主機處理器任擇地運行主機作業系統120,支援模擬器程式110。在一些配置中,可存在介於硬體與所提供的指令執行環境之間的模擬之多個層,及/或提供在相同主機處理器上的多個相異指令執行環境。歷史上,已需要強大的處理器提供以合理速度執行的模擬器實施方式,但此方法可在某些環境中經調整,諸如當出於兼容性或重新使用原因需要運行對於另一處理器為本機的碼時。例如,模擬器實施方式可提供具有不由主機處理器硬體支援的額外功能之指令執行環境,或提供通常與不同硬體架構相關的指令執行環境。在「Some Efficient Architecture Simulation Techniques」, Robert Bedichek, Winter 1990 USENIX Conference,第53–63頁中提供了模擬之概述。
在先前已參考特別硬體構造或特徵描述實施例的程度上,在模擬實施例中,等效功能可藉由適當軟體構造或特徵提供。例如,特別電路系統可在模擬實施例中實施為電腦程式邏輯。類似地,記憶體硬體諸如暫存器或快取可在模擬實施例中實施為軟體資料結構。在先前描述的實施例中引用的硬件元件中之一或多者存在於主機硬體(例如,主機處理器130)上的配置中,一些模擬實施例可在適合的情況下利用主機硬體。
模擬器程式110可儲存在電腦可讀儲存媒體(該電腦可讀媒體可為非暫時性媒體)上,且提供至目標代碼100(該目標代碼可包含應用程式、作業系統及超管理器)的程式介面(指令執行環境),該程式介面與藉由模擬器程式110模型化的硬體架構之應用程式介面相同。因而,目標代碼100之程式指令包含上述分支鏈接指令的分支目標變體,可使用模擬器程式110在指令執行環境內執行,使得實際上不具有以上所論述之設備2之硬體特徵的主機電腦130可模擬此等特徵。模擬器程式110可以,舉例而言,包括指令解碼程式邏輯114(例如,用於呼叫根據目標代碼100中遇到的指令的編碼而選擇的特定處理函數的一系列「if-then」語法),及對應於模擬器程式110的代碼之處理程式邏輯116,該模擬器程式110的代碼執行藉由指令解碼程式邏輯114選擇的功能。因此,處理程式邏輯116可包含用於提供如上所述的帶鏈結分支指令的分支目標變體的功能的邏輯。
在本申請案中,字語「經配置成……」用來意味設備之元件具有能夠實施所定義操作的組態。在此上下文中,「組態」意味硬體或軟體之互連之配置或方式。例如,設備可具有專用提供所定義操作的硬體,或處理器或其他處理裝置可經程式化來進行功能。「經配置成」並不暗示設備元件需要以任何方式改變以便提供所定義操作。
儘管本文已參考伴隨圖式詳細描述本發明之例示性實施例,但將理解,本發明不限於彼等精確實施例,且各種變化及修改可在不脫離如所附申請專利範圍界定的本發明之範疇及精神的情況下由熟習此項技術者實現於其中。
#add1~4‧‧‧地址
ADD‧‧‧處理指向添加指令
BTI‧‧‧分支目標指令
BLR‧‧‧帶鏈結分支指令
BLRTI‧‧‧帶鏈結分支指令的分支目標變體
RET‧‧‧返回分支指令
LR‧‧‧鏈結暫存器
Xn‧‧‧源暫存器
2‧‧‧資料處理設備
4‧‧‧處理電路系統
6‧‧‧指令解碼器
8‧‧‧指令快取
10‧‧‧控制訊號
14‧‧‧暫存器
15‧‧‧加載/儲存單元
16‧‧‧級別1資料快取
17‧‧‧級別2資料快取
18‧‧‧主要記憶體
20‧‧‧記憶體管理單元/MMU
22‧‧‧轉譯後備緩衝器/TLB
40~84‧‧‧流程圖步驟
100‧‧‧目標代碼
110‧‧‧支援模擬器程式
112‧‧‧儲存介質
114‧‧‧指令解碼程式邏輯
116‧‧‧處理程式邏輯
120‧‧‧主機作業系統
130‧‧‧主機處理器
本技術的其他態樣、特徵及優點將結合以下附圖的範例的描述變得顯而易見,其中:
圖1圖示了資料處理設備的一範例;
圖2圖示了帶鏈結分支指令的行為;
圖3圖示了用於比較的指令序列,包括帶鏈結分支指令及單獨的分支目標指令;
圖4示出了一範例,該範例為使用帶鏈結分支指令的分支目標變體;
圖5為一流程圖,示出了出目標檢查分支指令的方法;
圖6為一流程圖,示出了帶鏈結分支指令的處理過程;及
圖7示出了一模擬器範例,可用於實現該技術。
國內寄存資訊(請依寄存機構、日期、號碼順序註記)
無
國外寄存資訊(請依寄存國家、機構、日期、號碼順序註記)
無
#add1~4‧‧‧地址
ADD‧‧‧處理指向添加指令
BTI‧‧‧分支目標指令
BLR‧‧‧帶鏈結分支指令
BLRTI‧‧‧帶鏈結分支指令的分支目標變體
RET‧‧‧返回分支指令
LR‧‧‧鏈結暫存器
Xn‧‧‧源暫存器
Claims (16)
- 一種用於資料處理的設備,該設備包括:用於解碼指令的一指令解碼器;及處理電路系統系統,用於回應於藉由該指令解碼器解碼的指令,以進行資料處理;其中:回應於一分支指令,該指令解碼器配置成,控制該處理電路系統以觸發到在一目標地址處的一指令的一程式流程的非順序改變;當回應於一帶鏈結分支指令,而觸發該程式流程的非順序改變時,該指令解碼器配置成,控制該處理電路系統為一程式流程的後續返回設置一返回地址;當回應於至少一個分支指令之目標檢查類型,而觸發該程式流程的非順序改變時,該指令解碼器配置成,控制該處理電路系統以(i)檢查在該目標地址處的該指令是否為至少一個分支目標指令的允許類型,並且(ii)回應於確定了在該目標地址處的該指令係除了該至少一個分支目標指令的允許類型之外的一指令,而觸發一錯誤處置回應;及對於分支指令的該至少一個目標檢查類型的至少一子集而言,該至少一個分支目標指令的允許類型包含該帶鏈結分支指令的一分支目標變體。
- 如請求項1所述之設備,其中: 回應於除了該分支目標變體之外的一帶鏈結分支指令,該處理電路系統配置成,在該帶鏈結分支指令之後順序地將該返回地址設置成下一指令的一地址。
- 如請求項1或2所述之設備,其中:回應於該帶鏈結分支指令的該分支目標變體,該處理電路系統配置成,將該返回地址設置成該帶鏈結分支指令的該分支目標變體的一地址。
- 如請求項1所述之設備,其中:當程式流程從該至少一個目標檢查類型的一分支指令非順序地傳遞到該帶鏈結分支指令的該分支目標變體時,該處理電路系統配置成,抑制與該帶鏈結分支指令的該分支目標變體相關的程式流程的一非順序改變。
- 如請求項1所述之設備,其中:對於一分支指令的第一目標檢查類型而言,該帶鏈結分支指令的該分支目標變體可為該至少一個分支目標指令的允許類型之一;及對於一分支指令的第二目標檢查類型而言,該帶鏈結分支指令的該分支目標變體並非該至少一個分支目標指令的允許類型之一。
- 如請求項1所述之設備,其中:對於分支指令的一個或更多個目標檢查類型之一第 一子集而言,該帶鏈結分支指令的一第一分支目標變體為該至少一個分支目標指令的允許類型之一;及對於分支指令的一個或更多個目標檢查類型之不同於該第一子集的一第二子集而言,該帶鏈結分支指令的一第二分支目標變體為該至少一個分支目標指令的允許類型之一。
- 如請求項1所述之設備,其中該帶鏈結分支指令的該分支目標變體具有與該帶鏈結分支指令的另一個變體不同的一不同編碼,其並非該至少一個分支目標指令的允許類型。
- 如請求項1所述之設備,其中該帶鏈結分支指令的該分支目標變體具有與該帶鏈結分支指令的另一個變體相同的一編碼,其並非該至少一個分支目標指令的允許類型。
- 如請求項1所述之設備,其中該指令解碼器及該處理電路系統中的至少一個配置成,基於除了一給定帶鏈結分支指令的該指令編碼之外的至少一個參數,來決定該給定帶鏈結分支指令的該變體。
- 如請求項9所述之設備,其中該至少一個參數包括儲存在一配置暫存器中的一配置參數。
- 如請求項1所述之設備,其中至少該一個參數包括給定該帶鏈結分支指令的一指令地址。
- 如請求項1所述之設備,其中,當程式流程從分支指令的一給定目標檢查類型非順序地傳遞到一給定帶鏈結分支指令時,該至少一個參數包括該分支指令的給定目標檢查類型的一指令地址。
- 如請求項12所述之設備,其中回應於該分支指令的給定目標檢查類型與該給定帶鏈結分支指令之間採用的一異常,該處理電路系統配置成,記錄用於決定該給定帶鏈結分支指令的該變體的資訊。
- 一種資料處理方法,包括以下步驟:回應於一分支指令,觸發到在一目標地址處的一指令的一程式流程的非順序改變;當回應於一帶鏈結分支指令,而觸發該程式流程的非順序改變時,為一程式流程的後續返回設置一返回地址;及當回應於至少一個分支指令的目標檢查類型,而觸發該程式流程的非順序改變時,檢查在該目標地址處的該指令是否為至少一個分支目標指令的允許類型,並且回應於確定了在該目標地址處的該指令係除了該至少一個分支目標指令的允許類型之外的一指令,而觸發一錯誤處置回應;其中對於該至少一個分支指令的目標檢查類型的至少一子集而言,該至少一個分支目標指令的允許類型 包含該帶鏈結分支指令的一分支目標變體。
- 一種電腦程式,用於控制一主機資料處理設備,以提供用於執行目標程式代碼的指令一指令執行環境,包括:一指令解碼程式邏輯,用於解碼該目標程式代碼的指令;及一處理程式邏輯,以回應於藉由該指令解碼程式邏輯解碼的指令,執行資料處理;其中:回應於一分支指令,該指令解碼程式邏輯配置成,控制該處理程式邏輯以觸發到在一目標地址處的一指令的一程式流程的非順序改變;當回應於一帶鏈結分支指令,而觸發該程式流程的非順序改變時,該指令解碼程式邏輯配置成,控制該處理程式邏輯以為一程式流程的後續返回設置一返回地址;當回應於至少一個分支指令的目標檢查類型,而觸發該程式流程的非順序改變時,該指令解碼程式邏輯配置成,控制該處理程式邏輯以(i)檢查在該目標地址處的該指令是否為至少一個分支目標指令的允許類型,並且(ii)回應於確定了在該目標地址處的該指令係除了該至少一個分支目標指令的允許類型之外的一指令,而觸發一錯誤處置回應;及 對於分支指令的該至少一個目標檢查類型的至少一子集而言,該至少一個分支目標指令的允許類型包含該帶鏈結分支指令的一分支目標變體。
- 一種儲存如請求項15所述之電腦程式之儲存媒體。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1804231.7A GB2571996B (en) | 2018-03-16 | 2018-03-16 | Branch target variant of branch-with-link instruction |
GB1804231.7 | 2018-03-16 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201939272A TW201939272A (zh) | 2019-10-01 |
TWI801505B true TWI801505B (zh) | 2023-05-11 |
Family
ID=62017690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW108105733A TWI801505B (zh) | 2018-03-16 | 2019-02-21 | 帶鏈結分支指令的分支目標變體 |
Country Status (8)
Country | Link |
---|---|
US (1) | US11307856B2 (zh) |
EP (1) | EP3765957B1 (zh) |
JP (1) | JP7377807B2 (zh) |
KR (1) | KR20200128720A (zh) |
GB (1) | GB2571996B (zh) |
IL (1) | IL276809B2 (zh) |
TW (1) | TWI801505B (zh) |
WO (1) | WO2019175530A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230418608A1 (en) * | 2022-06-23 | 2023-12-28 | Intel Corporation | Implicit memory corruption detection for conditional data types |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050149781A1 (en) * | 2003-12-01 | 2005-07-07 | Oded Lempel | System and method for soft error handling |
US20120204007A1 (en) * | 2011-02-07 | 2012-08-09 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
WO2017032969A1 (en) * | 2015-08-27 | 2017-03-02 | Arm Limited | An apparatus and method for controlling instruction execution behaviour |
US20170090933A1 (en) * | 2015-09-30 | 2017-03-30 | Imagination Technologies Limited | Fetch unit for predicting target for subroutine return instructions |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0729097A1 (en) * | 1995-02-07 | 1996-08-28 | Sun Microsystems, Inc. | Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program |
JP2002259118A (ja) | 2000-12-28 | 2002-09-13 | Matsushita Electric Ind Co Ltd | マイクロプロセッサ及び命令列変換装置 |
US6874081B2 (en) * | 2001-05-17 | 2005-03-29 | Broadcom Corporation | Selection of link and fall-through address using a bit in a branch address for the selection |
US9798873B2 (en) * | 2011-08-04 | 2017-10-24 | Elwha Llc | Processor operable to ensure code integrity |
US20130024676A1 (en) * | 2011-07-19 | 2013-01-24 | Glew Andrew F | Control flow integrity |
US9448796B2 (en) * | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
GB2535514B (en) * | 2015-02-19 | 2021-09-22 | Advanced Risc Mach Ltd | Processor exception handling |
US10423777B2 (en) | 2016-04-14 | 2019-09-24 | Endgame, Inc. | Preventing execution of malicious instructions based on address specified in a branch instruction |
-
2018
- 2018-03-16 GB GB1804231.7A patent/GB2571996B/en active Active
-
2019
- 2019-02-13 IL IL276809A patent/IL276809B2/en unknown
- 2019-02-13 WO PCT/GB2019/050379 patent/WO2019175530A1/en active Application Filing
- 2019-02-13 KR KR1020207028590A patent/KR20200128720A/ko not_active Application Discontinuation
- 2019-02-13 JP JP2020546090A patent/JP7377807B2/ja active Active
- 2019-02-13 US US16/971,755 patent/US11307856B2/en active Active
- 2019-02-13 EP EP19707065.9A patent/EP3765957B1/en active Active
- 2019-02-21 TW TW108105733A patent/TWI801505B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050149781A1 (en) * | 2003-12-01 | 2005-07-07 | Oded Lempel | System and method for soft error handling |
US20120204007A1 (en) * | 2011-02-07 | 2012-08-09 | Arm Limited | Controlling the execution of adjacent instructions that are dependent upon a same data condition |
WO2017032969A1 (en) * | 2015-08-27 | 2017-03-02 | Arm Limited | An apparatus and method for controlling instruction execution behaviour |
US20170090933A1 (en) * | 2015-09-30 | 2017-03-30 | Imagination Technologies Limited | Fetch unit for predicting target for subroutine return instructions |
Also Published As
Publication number | Publication date |
---|---|
EP3765957A1 (en) | 2021-01-20 |
IL276809B1 (en) | 2023-11-01 |
EP3765957B1 (en) | 2024-05-08 |
WO2019175530A1 (en) | 2019-09-19 |
GB2571996B (en) | 2020-09-09 |
CN111771188A (zh) | 2020-10-13 |
IL276809B2 (en) | 2024-03-01 |
JP7377807B2 (ja) | 2023-11-10 |
IL276809A (en) | 2020-10-29 |
JP2021517293A (ja) | 2021-07-15 |
US20210109755A1 (en) | 2021-04-15 |
US11307856B2 (en) | 2022-04-19 |
GB2571996A (en) | 2019-09-18 |
GB201804231D0 (en) | 2018-05-02 |
KR20200128720A (ko) | 2020-11-16 |
TW201939272A (zh) | 2019-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10747536B2 (en) | Program loop control | |
JP6189039B2 (ja) | セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法 | |
TWI749000B (zh) | 程式迴圈控制 | |
TWI746529B (zh) | 分支指令 | |
US11727110B2 (en) | Verifying stack pointer | |
JP2021519458A (ja) | 投機的サイド・チャネル・ヒント命令 | |
US20220366037A1 (en) | Domain transition disable configuration parameter | |
JP2023038361A (ja) | 命令セット内の変更を制御する装置及び方法 | |
TWI801505B (zh) | 帶鏈結分支指令的分支目標變體 | |
CN111771188B (zh) | 数据处理装置及数据处理方法 | |
EP4073635B1 (en) | Intermodal calling branch instruction | |
TW202407538A (zh) | 無操作相容指令 | |
TW202418067A (zh) | 堆疊指標切換有效性檢查 |