專利名稱:數(shù)據(jù)處理設(shè)備及用于執(zhí)行混淆程序的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種包括可編程處理器的數(shù)據(jù)處理設(shè)備,以及一種轉(zhuǎn)換用于可編程處理器的指令程序的方法。
背景技術(shù):
代碼混淆(obfuscation)是用于轉(zhuǎn)換針對(duì)計(jì)算機(jī)的指令程序的技術(shù)的一般名稱, 這種轉(zhuǎn)換采用模糊指令程序內(nèi)容的方式。代碼混淆可以應(yīng)用于使得很難識(shí)別程序的相關(guān)部 分,該相關(guān)部分是在未許可類型的計(jì)算機(jī)上或者在沒(méi)有保護(hù)措施的情況下執(zhí)行程序所必需 的。美國(guó)專利No. 6,779,114描述了一種代碼混淆技術(shù),該技術(shù)涉及程序的模糊控制 流。將分支指令添加至指令塊,以使得模糊指令塊的預(yù)期執(zhí)行順序。美國(guó)專利No. 5,559,884 描述了對(duì)程序的基本塊的偽隨機(jī)重排序,以創(chuàng)建可以用于識(shí)別源的標(biāo)簽,通過(guò)該源來(lái)分布程序。在這樣的技術(shù)中,存在可以恢復(fù)原始程序的風(fēng)險(xiǎn)。一般地,處理器的實(shí)際程序流 (即,處理器解釋程序代碼的方式)是公知的。因此,可以使用與目標(biāo)處理器上的知識(shí)相組 合的靜態(tài)和動(dòng)態(tài)分析技術(shù),來(lái)研究混淆后的程序。此外,混淆可以使性能劣化。例如,混淆 后的程序可以使高速緩存的效率低下。
發(fā)明內(nèi)容
本發(fā)明的目的是提供了一種支持程序執(zhí)行的數(shù)據(jù)處理設(shè)備,該程序以混淆的方式 存儲(chǔ)在存儲(chǔ)器中。提供了一種根據(jù)權(quán)利要求1所述的處理設(shè)備。因此,將程序中邏輯上連續(xù)位置的 指令的存儲(chǔ)地址進(jìn)行序列改變,,即,可以按照邏輯上連續(xù)位置的順序以臨時(shí)順序執(zhí)行指 令,以便正確執(zhí)行程序。不執(zhí)行來(lái)自于直接由傳統(tǒng)遞增產(chǎn)生的地址的指令,傳統(tǒng)遞增是以固 定值或者在指令的大小不是常量的情況下用該大小對(duì)程序計(jì)數(shù)器進(jìn)行遞增,而是程序流控 制單元在邏輯上連續(xù)指令的地址之間引入了可變位置相關(guān)目標(biāo)地址步長(zhǎng),該步長(zhǎng)與指令的 大小不相對(duì)應(yīng)。在執(zhí)行之前,可以根據(jù)這些地址步長(zhǎng)來(lái)對(duì)指令的順序進(jìn)行序列改變,使得正 常執(zhí)行程序。在實(shí)施例中,程序流控制單元包括用于表示對(duì)程序流加以控制的可編程秘密信息 的電路。如這里所使用的,“秘密”意味著正常操作下在處理設(shè)備外部不可訪問(wèn)該信息。用 于表示可編程秘密信息的電路可以包括例如程序流控制單元可訪問(wèn)的查找存儲(chǔ)器。程序計(jì) 數(shù)器可以用于對(duì)查找存儲(chǔ)器進(jìn)行尋址,以獲取對(duì)程序計(jì)數(shù)器的更新,除了在執(zhí)行跳轉(zhuǎn)指令 的指令周期中以外。在后一種情況下,不同的跳轉(zhuǎn)控制電路可以用于提供更新。
使用以下附圖,根據(jù)示例實(shí)施例的描述這些和其他目的以及優(yōu)點(diǎn)方面將變得顯而易見(jiàn)。圖1示出了數(shù)據(jù)處理設(shè)備;圖la-d示出了程序流控制單元;圖2示出了程序轉(zhuǎn)換的流程圖;圖3示出了地址映射;圖3a示出了空間填充路徑以可視化地址映射;圖4示出了程序流控制單元;圖5、5a示出了程序流控制單元。
具體實(shí)施例方式基本數(shù)據(jù)處理設(shè)備圖1示出了數(shù)據(jù)處理設(shè)備,例如,集成電路。除了程序流控制單元16以外,處理設(shè) 備具有傳統(tǒng)體系結(jié)構(gòu),包括存儲(chǔ)器10、指令發(fā)出電路12、以及多個(gè)功能單元14、16,功能單 元14、16包括程序流控制單元16。指令發(fā)出電路12具有分別耦合至存儲(chǔ)器10的地址輸入 和數(shù)據(jù)輸出的地址輸出和指令輸入。指令發(fā)出電路12具有耦合至功能單元14、16的指令 輸出。程序流控制單元16具有耦合至指令發(fā)出電路12的地址輸出。程序流控制單元16被配置為確保程序的正確執(zhí)行,該程序的指令序列已經(jīng)被重 排序,以便混淆程序內(nèi)容。在實(shí)施例中,使用使指令高速緩存的效率的降低最小化的重排 序。圖Ia示出了程序流控制單元16的第一實(shí)施例。在該實(shí)施例中,程序流控制單元16包括程序計(jì)數(shù)器160和分支執(zhí)行電路162。程序計(jì)數(shù)器16具有耦合至指令發(fā)出電路(未 示出)的輸出。分支執(zhí)行電路162具有耦合至指令發(fā)出電路(未示出)以接收分支命令的 輸入,以及耦合至程序計(jì)數(shù)器160的輸出和輸入。在操作中,程序計(jì)數(shù)器160在時(shí)鐘CL所 指示的連續(xù)指令周期中進(jìn)行計(jì)數(shù)??蛇x地,在沒(méi)有以恒定間隔存儲(chǔ)指令的情況下,計(jì)數(shù)器的 遞增可以由從指令解碼器(未示出)接收到的指令長(zhǎng)度碼來(lái)控制。計(jì)數(shù)值作為提供給指令 發(fā)出電路的指令的地址。在指令周期中,其中分支執(zhí)行電路162已接收到分支命令并已確 定必須采用該分支命令,典型地,分支執(zhí)行電路162根據(jù)將分支間隔與程序計(jì)數(shù)器值相加, 或者從程序計(jì)數(shù)器值中減去分支間隔來(lái)改寫(xiě)程序計(jì)數(shù)器值。圖Ib示出了程序流控制單元16的實(shí)施例,程序流控制單元16還包括映射電路 164。程序計(jì)數(shù)器160使其輸出通過(guò)映射電路164耦合至指令發(fā)出電路(未示出)。在操作 中,可選地,程序計(jì)數(shù)器160在連續(xù)指令周期中以受指令長(zhǎng)度控制的遞增方式進(jìn)行計(jì)數(shù)。映 射電路164將計(jì)數(shù)值映射到目標(biāo)地址,并將計(jì)數(shù)值提供給指令發(fā)布電路??梢詫⒂成潆娐?164實(shí)現(xiàn)為查找表電路,例如,在計(jì)數(shù)值可尋址的位置處存儲(chǔ)了目標(biāo)地址的查找存儲(chǔ)器。例 如可以使用被隨機(jī)分配給相應(yīng)計(jì)數(shù)值的目標(biāo)地址集合。作為針對(duì)查找電路或者與這種查找 電路相組合的備選方案,運(yùn)算電路可以用于計(jì)算地址,或者特殊設(shè)計(jì)的邏輯電路可以用于 計(jì)算地址。這樣的電路可以被配置為將每個(gè)計(jì)數(shù)值映射到目標(biāo)地址集合中的相應(yīng)的、偽隨 機(jī)選擇的一個(gè)。在實(shí)施例中,邏輯上連續(xù)指令之間的地址步長(zhǎng)的符號(hào)可以具有偽隨機(jī)概率, 艮口,沿一個(gè)方向的地址步長(zhǎng)與沿另一方向的步長(zhǎng)常常相同。因此,即使僅使用有限數(shù)目的步 長(zhǎng)大小,步長(zhǎng)的符號(hào)也可以是隨機(jī)的。同樣,連續(xù)步長(zhǎng)的聯(lián)合概率也可以是隨機(jī)的,因此,沿一個(gè)方向的步長(zhǎng)之后常常使用沿另一方向的步長(zhǎng)就好像是在相同方向的步長(zhǎng) 備選地,可以使用其他映射。在指令周期中,其中,分支執(zhí)行電路162已接收到分 支命令并已確定必須采用該分支命令。典型地,分支執(zhí)行電路162根據(jù)將分支間隔與程序 計(jì)數(shù)器值相加,或者從程序計(jì)數(shù)器值中減去分支間隔來(lái)改寫(xiě)程序計(jì)數(shù)器值。圖Ic示出了程序流控制單元16的備選實(shí)施例,程序流控制單元16用于被連續(xù)映 射的指令地址的塊。該實(shí)施例包括耦合在映射電路164與指令存儲(chǔ)器(未示出)之間的附 加目標(biāo)程序計(jì)數(shù)器166,以及更新選擇器168。更新選擇器168控制程序計(jì)數(shù)器160何時(shí)遞 增,以及根據(jù)映射電路164遞增還是更新目標(biāo)程序計(jì)數(shù)器166。在操作中,程序計(jì)數(shù)器160 在每個(gè)塊的開(kāi)始處遞增,并且目標(biāo)程序計(jì)數(shù)器166在塊的開(kāi)始處拷貝程序計(jì)數(shù)器160的映 射后的程序計(jì)數(shù)器值。例如,可以通過(guò)包括在程序中的信息,或者通過(guò)在執(zhí)行特定類型的指 令時(shí)自動(dòng)開(kāi)始新塊,來(lái)控制塊的開(kāi)始。圖Id示出了具有更新單元161的程序流控制單元16的實(shí)施例。更新單元16在 不執(zhí)行跳轉(zhuǎn)時(shí)控制指令地址的更新。在實(shí)施例中,更新單元被配置為向程序計(jì)數(shù)器160輸 出地址步長(zhǎng),并且程序計(jì)數(shù)器160將地址步長(zhǎng)與程序計(jì)數(shù)器值相加。更新單元161根據(jù)程 序計(jì)數(shù)器值來(lái)選擇地址步長(zhǎng),以下對(duì)步長(zhǎng)值進(jìn)行描述。例如可以使用偽隨機(jī)步長(zhǎng)。在實(shí)施 例中,更新單元161包括查找存儲(chǔ)器,以查找針對(duì)相應(yīng)程序計(jì)數(shù)器值的步長(zhǎng)。備選地,可以 使用被設(shè)計(jì)為產(chǎn)生地址步長(zhǎng)的邏輯電路。在另一實(shí)施例中,更新單元輸出根據(jù)先前程序計(jì) 數(shù)器值而確定的下個(gè)程序計(jì)數(shù)器值的一部分或全部。查找存儲(chǔ)器可以使用先前程序計(jì)數(shù)器 值來(lái)獲取下個(gè)程序計(jì)數(shù)器值。這樣,在程序計(jì)數(shù)器120中不使用相加來(lái)獲得地址步長(zhǎng)。可 選地,分支執(zhí)行電路162可以包括分支目標(biāo)查找存儲(chǔ)器162a,分支目標(biāo)查找存儲(chǔ)器162a用 于以更新指令地址的相應(yīng)方式查找跳轉(zhuǎn)指令的分支目標(biāo)。在實(shí)施例中,分支執(zhí)行電路162 包括用于計(jì)算分支目標(biāo)地址的計(jì)算電路(未分離示出)。指令發(fā)出電路12包括指令高速緩存存儲(chǔ)器120、指令高速緩存控制器122、以及 指令寄存器124。指令高速緩存控制器122具有耦合至程序流控制單元16的地址輸出的輸 入,以及耦合至存儲(chǔ)器10和指令高速緩存存儲(chǔ)器120的輸出。指令高速緩存存儲(chǔ)器120具 有耦合至存儲(chǔ)器10的輸入,以及耦合至指令寄存器124的輸出。指令寄存器124具有耦合 至功能單元14、16的輸出。功能單元14、16可以耦合至一個(gè)或多個(gè)寄存器文件(未示出) 和/或數(shù)據(jù)存儲(chǔ)器(未示出)。在另一實(shí)施例(未示出)中,功能單元14、16還可以耦合至 存儲(chǔ)器10。在操作中,功能單元14、16在連續(xù)指令周期內(nèi)執(zhí)行連續(xù)指令。程序流控制單元16 確定必須由功能單元14、16執(zhí)行的指令的地址,并且向指令發(fā)出電路2指示這些地址。指 令高速緩存控制器122根據(jù)這些地址確定指令在指令高速緩存存儲(chǔ)器120中是否可用,并 且使得從指令高速緩存存儲(chǔ)器120向指令寄存器124發(fā)出指令。如果在指令高速緩存存儲(chǔ) 器120中沒(méi)有指令,則指令高速緩存控制器122從存儲(chǔ)器10中取出指令(可選地作為較大 指令塊的一部分)放入指令高速緩存存儲(chǔ)器1中。高速緩存未命中與缺乏局部性有關(guān)。通常,在第一和第二指令地址非常近以致于 它們基于它們的地址被一起保存在高速緩存中的情況下,在從第一指令地址到第二指令地 址時(shí)不太可能發(fā)生高速緩存未命中。這通常應(yīng)用于相鄰地址,但是也可以應(yīng)用于更大間隔 處的地址。當(dāng)基于地址的接近性將地址的內(nèi)容存儲(chǔ)在指令高速緩存存儲(chǔ)器120中時(shí),地址被稱作相對(duì)于彼此是局部的。典型地,可以將為高速緩存定義的局部性間隔作為地址之間 的最大間隔,這些地址的內(nèi)容可以由于這些地址之間的相似性而共同存儲(chǔ)。在簡(jiǎn)單示例中, 其中將分別具有多個(gè)地址的行的內(nèi)容高速緩存在指令高速緩存存儲(chǔ)器120中,如果地址屬 于相同行,則這些地址相對(duì)于彼此是局部的。在這種情況下,局部性間隔是線長(zhǎng)度。在另一 示例中,其中,將地址的移動(dòng)窗高速緩存在指令高速緩存存儲(chǔ)器120中,當(dāng)窗向前移動(dòng)時(shí), 用在窗結(jié)束處的地址來(lái)代替窗開(kāi)始處的地址,如果地址的間隔小于窗大小,則地址相對(duì)于 彼此是局部的。在這種情況下,局部性間隔是窗大小。當(dāng)將指令存儲(chǔ)在高速緩存行(例如,每行64或128個(gè)指令地址)中時(shí),如果將程 序流限制到有限數(shù)目的高速緩存行,即,限制在有限數(shù)目的地址范圍,使得可以將范圍高速 緩存在一起,則可以避免高速緩存未命中。應(yīng)當(dāng)認(rèn)識(shí)到,許多備選指令發(fā)出電路體系結(jié)構(gòu)和管理方法是可能的。例如,可以以 壓縮和/或加密的形式將指令存儲(chǔ)在存儲(chǔ)器10中,在這種情況下,可以在高速緩存存儲(chǔ)器 與存儲(chǔ)器10和/或指令寄存器124之間使用解壓縮器和/或解密電路。在一些情況下,可 以繞過(guò)指令高速緩存存儲(chǔ)器120?,F(xiàn)在,作為示意,使用簡(jiǎn)單指令高速緩存存儲(chǔ)器。程序流控制單元16可以包括在每個(gè)指令周期內(nèi)更新的程序計(jì)數(shù)器寄存器。當(dāng)程 序流控制單元16接收到分支指令(也被稱作跳轉(zhuǎn)指令)時(shí),該程序流控制單元16根據(jù)分 支指令執(zhí)行更新。否則,程序流控制單元16應(yīng)用局部定義的更新。在實(shí)施例中,程序流控 制單元16在不執(zhí)行分支的每個(gè)指令周期內(nèi),將當(dāng)前指令長(zhǎng)度與程序計(jì)數(shù)器存儲(chǔ)器的內(nèi)容 相加。在另一實(shí)施例中,可以使用預(yù)取,在這種情況下,程序流控制單元16和/或指令高 速緩存控制器122計(jì)算預(yù)期在未來(lái)執(zhí)行的指令的預(yù)測(cè)地址,并且指令高速緩存控制器122 預(yù)取這些指令。例如,預(yù)測(cè)地址可以通過(guò)預(yù)先應(yīng)用局部定義的更新(即,在假定不會(huì)遇到分 支指令的情況下)來(lái)形成。此外,諸如分支預(yù)測(cè)等其他技術(shù)可以用于計(jì)算預(yù)測(cè)地址。在備選實(shí)施例中,數(shù)據(jù)處理設(shè)備可以與程序流控制單元16 —起使用,程序流控制 單元16常規(guī)地遞增程序計(jì)數(shù)器,并使用程序計(jì)數(shù)器對(duì)指令進(jìn)行尋址,而無(wú)需映射到目標(biāo)指 令。在這種情況下,在一個(gè)實(shí)施例中,數(shù)據(jù)處理設(shè)備包括軟件和/或硬件,以在執(zhí)行程序之 前對(duì)程序進(jìn)行預(yù)處理。執(zhí)行預(yù)處理,以便取消指令的序列的重排列。由于可以避免高速緩 存未命中,因此可以高效地進(jìn)行預(yù)處理。不需要立即取消針對(duì)整個(gè)程序的重排列。每次在 處理器開(kāi)始執(zhí)行相應(yīng)程序部分之前,每次對(duì)相應(yīng)的程序部分進(jìn)行預(yù)處理。作為另一實(shí)施例, 可以將跳轉(zhuǎn)指令添加至程序,以使得處理器能夠根據(jù)指令的重排列的順序跳轉(zhuǎn)??梢詫?duì)跳 轉(zhuǎn)指令目標(biāo)進(jìn)行加密,在這種情況下,數(shù)據(jù)處理設(shè)備可以包括用于對(duì)目標(biāo)進(jìn)行解密的軟件 或硬件解密器。作為另一實(shí)施例,可以與程序分離的形式將跳轉(zhuǎn)列表提供給數(shù)據(jù)處理設(shè)備, 并在執(zhí)行期間由程序流控制單元16使用。該列表上的條目可以執(zhí)行跳轉(zhuǎn)位置和跳轉(zhuǎn)目標(biāo) 的組合集合。程序轉(zhuǎn)換圖2示出了程序轉(zhuǎn)換的流程圖。在將程序的指令存儲(chǔ)在存儲(chǔ)器10中來(lái)執(zhí)行之前 使用程序轉(zhuǎn)換。程序轉(zhuǎn)換可以由程序轉(zhuǎn)換裝置來(lái)執(zhí)行,例如,被編程以執(zhí)行程序轉(zhuǎn)換的計(jì)算 機(jī)。在第一步驟21中,程序轉(zhuǎn)換裝置接收必須要轉(zhuǎn)換的指令程序。在第二步驟22中,程序 轉(zhuǎn)換裝置檢測(cè)程序中的分支指令,并構(gòu)造具有分支指令的位置和分支目標(biāo)的表。
在第三步驟23中,程序轉(zhuǎn)換裝置將程序劃分成指令塊。優(yōu)選地,為每個(gè)分支目標(biāo) 定義塊,該塊以分支目標(biāo)處的指令開(kāi)始??蛇x地,可以形成不以分支目標(biāo)開(kāi)始的附加塊。在 實(shí)施例中,每個(gè)塊可以包含不超過(guò)單個(gè)指令。每個(gè)塊延長(zhǎng)至下個(gè)塊的開(kāi)始。例如,按照塊在 程序中出現(xiàn)的順序,為該塊指定索引數(shù)。在第四步驟24,程序轉(zhuǎn)換裝置根據(jù)映射函數(shù)映射索 引數(shù)。在第五步驟25中,程序轉(zhuǎn)換裝置按照每個(gè)塊出現(xiàn)的順序在每塊的結(jié)束處將分支指令 添加至下個(gè)塊。在第六步驟26中,程序轉(zhuǎn)換裝置通過(guò)按照塊的映射索引數(shù)來(lái)布置塊,以形 成轉(zhuǎn)換后的程序。在第七步驟中,程序轉(zhuǎn)換裝置根據(jù)重排列的塊的地址,替換分支目標(biāo)在程 序的分支指令中的定義。可選地,第五步驟25可以省略或用將信息添加至程序以指示新塊的開(kāi)始的步驟 來(lái)代替,在這種情況下,執(zhí)行程序的處理器必須通過(guò)以下方式來(lái)提供與地址有關(guān)的丟失信 息例如,通過(guò)重構(gòu)局部程序存儲(chǔ)器中的原始?jí)K序列、通過(guò)在塊的結(jié)束處添加分支、或者在 沒(méi)有顯式分支指令下情況下,通過(guò)在執(zhí)行期間自己主動(dòng)地實(shí)現(xiàn)指令地址跳轉(zhuǎn)。 在實(shí)施例中,每個(gè)塊僅包含一個(gè)指令。因此,在每個(gè)指令之后發(fā)生指令地址跳轉(zhuǎn)。指令地址映射優(yōu)選地,映射函數(shù)具有以下特性高效利用指令存儲(chǔ)器、保持高速緩存效率、以及 使重構(gòu)指令序列變得困難。指令存儲(chǔ)器的高效使用意味著,不會(huì)剩下太多沒(méi)有映射到指令 的未使用地址。高速緩存效率的保持意味著,導(dǎo)致高速緩存未命中的指令地址數(shù)目的變化 應(yīng)當(dāng)保持在高速緩存可以處理的范圍內(nèi)。使重構(gòu)指令序列變得困難意味著,連續(xù)執(zhí)行的指 令的地址之間的地址步長(zhǎng)的統(tǒng)計(jì)特性應(yīng)當(dāng)具有某些偽隨機(jī)特征。因此,例如地址步長(zhǎng)的頻 率分布不應(yīng)集中于單個(gè)步長(zhǎng)值,應(yīng)當(dāng)避免連續(xù)步長(zhǎng)值與頻繁重復(fù)模式之間的強(qiáng)相關(guān)性。這些不同的特性會(huì)沖突。例如,最好在整個(gè)地址空間使用隨機(jī)地址步長(zhǎng)來(lái)使重構(gòu) 指令序列變得困難,而高速緩存效率取決于可預(yù)測(cè)的地址步長(zhǎng),優(yōu)選地單位大小。圖3示意性示出了將困難重構(gòu)與高速緩存效率相組合的映射。在第一列30中示 出了映射之前連續(xù)原始指令地址的位置,表示邏輯上連續(xù)指令序列。在第二列31中示出了 通過(guò)對(duì)原始指令地址應(yīng)用映射而獲得的目標(biāo)地址的位置。如所見(jiàn),將來(lái)自于指令地址序列 32的連續(xù)原始指令地址映射到目標(biāo)地址的不相交范圍33a-d的有限集合。序列32是第一 列30所表示的序列的適當(dāng)子序列,意味著在該列中存在其他子序列。作為示例,包含16個(gè) 指令的序列32可以與原始指令地址一起使用,該原始指令地址映射成4個(gè)范圍33a-d的目 標(biāo)地址??梢允褂美?4或256個(gè)指令的較大序列或者不同數(shù)目的指令??梢詫⑿蛄?2 之外的原始指令地址映射到其他范圍集合中的目標(biāo)地址。這可以基于第一列3中具有與序 列32相同大小的其他序列來(lái)進(jìn)行,其中其他序列中的每一個(gè)被映射到不同的范圍集合。典 型地,序列32之外的原始指令地址的一部分映射到范圍33a-d之間的目標(biāo)地址。在目標(biāo)指令之間存在地址步長(zhǎng),目標(biāo)指令是序列32中的連續(xù)原始指令地址的映 射。作為示例,已經(jīng)指示了幾個(gè)地址步長(zhǎng)34。如圖所見(jiàn),地址步長(zhǎng)可以是范圍33a-d之內(nèi)或 范圍之間的步長(zhǎng)。原始指令地址序列定義了目標(biāo)地址之間的地址步長(zhǎng)序列,目標(biāo)地址是連 續(xù)原始指令地址對(duì)的映射。在該地址步長(zhǎng)序列中,不同類型的地址步長(zhǎng)彼此混合。避免了 高度可預(yù)測(cè)的序列。因此,例如,如果序列32的連續(xù)部分被分別映射到范圍33a-d中相應(yīng) 的一個(gè),則該序列就是高度可預(yù)測(cè)的。這應(yīng)當(dāng)與以下地址步長(zhǎng)序列相對(duì)應(yīng)首先包含第一范 圍33a內(nèi)的地址步長(zhǎng),然后到第二范圍33b步長(zhǎng)、接著第二范圍33b內(nèi)的地址步長(zhǎng),依此類推。通過(guò)使用地址步長(zhǎng)序列來(lái)實(shí)現(xiàn)幾乎不可預(yù)測(cè)的序列,該地址步長(zhǎng)序列在第一范圍33a中的步長(zhǎng)之間包含范圍33b-d的其他范圍內(nèi)的步長(zhǎng),并因此在第一范圍33a中的步長(zhǎng)之間 包含范圍之間的步長(zhǎng)。優(yōu)選地,序列32到范圍的映射是一對(duì)一的,意味著在范圍33a_d的有限集合中的 所有目標(biāo)地址是來(lái)自序列32的原始指令地址的映射,但是可以使用不密集的映射,其中, 例如范圍33a-d的有限集合中的一半目標(biāo)地址與所有目標(biāo)地址之間的目標(biāo)地址是來(lái)自序 列32的原始指令地址的映射??梢允褂萌魏纬潭鹊奶畛?。使用至少一半的填充確保以至 少50%效率使用存儲(chǔ)器。優(yōu)選地,使用至少90%的填充,更優(yōu)選地,使用100%填充。當(dāng)然, 可以使用并不如此填充滿的例外范圍。只要以描述的方式將一個(gè)或多個(gè)指令(子)序列映 射到至少填充一半的范圍,實(shí)現(xiàn)了一些改進(jìn)的局部性,即使其他子序列沒(méi)有這么多的填充 范圍。優(yōu)選地,以這種方式映射程序的混淆部分中的多數(shù)指令序列,更優(yōu)選地,唯一的例外 是少于10%,序列不以這種方式映射。。當(dāng)將第一列30的原始指令地址劃分成與圖中所示的序列32類似的多個(gè)序列(其 中,可以以這種方式將每個(gè)序列映射到范圍的不同集合)時(shí),組合的范圍集合充滿地址空 間,從而其他序列的目標(biāo)地址的多個(gè)范圍在序列32的范圍33a-d之間。因此,在其他范圍 內(nèi)的范圍地址步長(zhǎng)中地址步長(zhǎng)之間的程序地址步長(zhǎng)將出現(xiàn)在各處。在實(shí)施例中,選擇是序列32的映射的范圍集合33的數(shù)目和大小,,以使范圍33a_d 的大小之和小于高速緩存存儲(chǔ)器大小。這確保了具有序列32中的原始指令地址的所有指 令可以一起保持在高速緩存中,降低了高速緩存未命中。但是即使不是所有指令在高速緩 存中,高速緩存效率也會(huì)因使用范圍內(nèi)的地址步長(zhǎng)提高了局部性而得到提高??梢詫⒎秶?33a-d中的不同的范圍保持在不同的高速緩存行中,或者高速緩存行組中,而具有在范圍 33a-d之間的目標(biāo)地址的指令不需要保持在高速緩存中。因此,可以最小化高速緩存未命 中。另一方面,事實(shí)在于,序列32的映射不限于一個(gè)連續(xù)范圍,并且不同范圍內(nèi)的步長(zhǎng)可以 混合,以使得能夠?qū)崿F(xiàn)指令的重排序,使重構(gòu)指令序列變得困難。使用范圍33a_d的有限集合使得能夠使用有限數(shù)目的地址步長(zhǎng)大小,而仍使重構(gòu) 指令序列變得困難。在實(shí)施例中,每個(gè)范圍內(nèi)的地址步長(zhǎng)的大小受限于一個(gè)指令長(zhǎng)度,例 如,僅使用該大小的向前和向后地址步長(zhǎng)。通過(guò)使用其他范圍33a_d中這種向前和向后地 址步長(zhǎng)之間的地址步長(zhǎng),可以確保對(duì)不同指令進(jìn)行尋址。由于相鄰指令之間的地址步長(zhǎng)可 以是向前或向后的,因此很難重構(gòu)序列。由于使用單位地址步長(zhǎng),可以提高高速緩存效率, 這是由于范圍內(nèi)的地址步長(zhǎng)是局部的。在實(shí)施例中,每一對(duì)范圍33a_d之間的地址步長(zhǎng)的大小還受限于針對(duì)每一對(duì)的單 一大小,和/或地址步長(zhǎng)受限于所選范圍33a_d對(duì)之間的步長(zhǎng)。當(dāng)然,如果使用所有范圍對(duì) 之間的步長(zhǎng),針對(duì)不同范圍對(duì)的大小是不同的,這是由于范圍對(duì)可以處于不同相互間隔處。 如果定義等距范圍的序列,并且地址步長(zhǎng)受限于序列中相鄰范圍之間的步長(zhǎng),甚至可以進(jìn) 一步減少不同步長(zhǎng)大小的數(shù)目。使用有限數(shù)目的步長(zhǎng)大小簡(jiǎn)化了映射,并且可以提高高速 緩沖效率。例如,通過(guò)以來(lái)自于當(dāng)前地址的具有相同大小的地址步長(zhǎng),使用來(lái)自于目標(biāo)地址 的指令的并行預(yù)處理,還可以有助于預(yù)取和流水線操作??梢暬梢酝ㄟ^(guò)多維空間中的點(diǎn)陣列來(lái)可視化映射,其中點(diǎn)表示目標(biāo)地址。然后每個(gè)范圍33a_d由該陣列中沿著第一維度的相應(yīng)行來(lái)表示。在這種可視化中,一個(gè)指令長(zhǎng)度的目 標(biāo)地址步長(zhǎng)與該空間中沿著第一維度的運(yùn)動(dòng)相對(duì)應(yīng)。沿著其他維度的運(yùn)動(dòng)與范圍33a_d中 不同的范圍之間的地址步長(zhǎng)相對(duì)應(yīng)。因此,可以將連續(xù)指令地址值的映射值序列可視化為η 維空間內(nèi)的路徑。在另一實(shí)施例中,每個(gè)范圍可以與陣列中行的相應(yīng)部分相對(duì)應(yīng),從而一個(gè) 以上范圍與陣列中的行相對(duì)應(yīng),或者范圍可以與陣列中的多個(gè)行相對(duì)應(yīng)。然而,為了說(shuō)明, 記住行與范圍之間的一對(duì)一關(guān)系。圖3a示出了具有這種路徑36以用于定義映射函數(shù)的二維空間。應(yīng)當(dāng)強(qiáng)調(diào)的是, 所示的特定路徑36僅用于示意路徑的概念實(shí)際上,可以使用其他更多的復(fù)雜路徑。示出 了具有坐標(biāo)為(x,y)的位置的行和列的二維陣列的一部分,其中,χ和y具有整數(shù)值。每一 行與范圍33a-d中不同的一個(gè)相對(duì)應(yīng),即,y值是范圍33a_d的標(biāo)記,并且該范圍占據(jù)行的一 部分。該部分內(nèi)沿χ方向的步長(zhǎng)與范圍內(nèi)的步長(zhǎng)相對(duì)應(yīng),沿y方向的步長(zhǎng)與范圍33a-d之 間的步長(zhǎng)相對(duì)應(yīng)。在一個(gè)示例中,根據(jù)A= (b(y)+x)*L,每個(gè)點(diǎn)(X,y)定義目標(biāo)地址A,其 中L是指令長(zhǎng)度,并且范圍的基地址由針對(duì)不同y值表示的b(y)表示。作為簡(jiǎn)單示例,可 以使用函數(shù)b (y) = A0+M*y,其中,M是大于范圍大小的整數(shù),AO是常數(shù)。
示出了空間填充路徑36的一部分。注意,所示的路徑36的形狀的具體選擇僅用于 示意路徑的概念。該空間填充路徑36可以延伸至所示空間部分的外部??臻g填充路徑36 沿著陣列的相應(yīng)點(diǎn)連續(xù)延伸,每次從相應(yīng)點(diǎn)移動(dòng)至與該相應(yīng)點(diǎn)相鄰的點(diǎn)中的一個(gè),并一次 僅訪問(wèn)一個(gè)點(diǎn)。路徑在所有維度中蜿蜒,在某種意義上,各個(gè)維度中步長(zhǎng)的頻率相差的倍數(shù) (遠(yuǎn))小于陣列的行中點(diǎn)的數(shù)目,例如相差不超過(guò)兩倍,并且不同維度中的步長(zhǎng)是混合的。因此,空間填充路徑36將沿著路徑36的位置“S”的第一函數(shù)定義為二維坐標(biāo)(X, y) = (Fx(s),F(xiàn)y(s))。由指令長(zhǎng)度所劃分的原始指令地址或其與基地址的差值可以用作位 置S。因此,目標(biāo)地址是(b(Fy(s))+FX(s))*L。如果使用指令索引數(shù),則s可以表示連續(xù)指 令索引數(shù)。使用空間填充路徑36來(lái)定義映射確保了存儲(chǔ)器的高效使用,這是由于該路徑訪 問(wèn)了陣列的所有點(diǎn),具有使用了范圍內(nèi)的所有目標(biāo)地址的效果。高速緩存是高效的,這是由 于可以將沿著所示路徑36與s值相對(duì)應(yīng)的16個(gè)地址的序列32僅映射到4個(gè)行,即4個(gè)范 圍。這是最好的情況,最壞的情況是它被映射到7個(gè)行。使重構(gòu)原始序列變得困難,這是由 于地址步長(zhǎng)是不規(guī)則的沿著空間填充路徑36不同范圍(行)內(nèi)的地址步長(zhǎng)彼此發(fā)生混 合。范圍內(nèi)的地址步長(zhǎng)與路徑26中一個(gè)行中的水平步長(zhǎng)相對(duì)應(yīng)。這種水平步長(zhǎng)可以向左 和向右,與向前和向后地址步長(zhǎng)相對(duì)應(yīng)。如所見(jiàn),在這樣的步長(zhǎng)之間,出現(xiàn)了到其他行的步 長(zhǎng)和在其他行內(nèi)的步長(zhǎng)。在實(shí)施例中,使用方形陣列,選擇的二維陣列的尺寸足夠大,以提供空間填充路徑 36的點(diǎn),空間填充路徑36的長(zhǎng)度超過(guò)需要替換的指令地址的數(shù)目。備選地,可以使用具有 更小尺寸或不同形狀的陣列。在較小陣列的情況下,必須要轉(zhuǎn)化的程序可以被分成段,每個(gè) 段具有不多于路徑中地址的地址,分別對(duì)相應(yīng)段應(yīng)用轉(zhuǎn)換。應(yīng)當(dāng)注意,利用η維空間中的路徑36以及到范圍的映射而實(shí)現(xiàn)的符合函數(shù)保持了 有限量的局部性。至少在路徑36沿著行(例如,沿著χ方向)移動(dòng)時(shí),保持了局部性。通 常,僅有限數(shù)目的地址范圍33a-d —起使用,這是由于存在有限數(shù)目的行。此外,如果基地 址b (y)之間的間隔不超過(guò)高速緩存的局部性間隔,則在路徑36沿著y方向移動(dòng)時(shí),也可以保持不會(huì)引起高速緩存未命中意義上的局部性。因此,通過(guò)使用具有局部步長(zhǎng)的空間填充 路徑36,與隨機(jī)地址序列相比,更大程度地保持了高速緩存的局部性。例如,諸如路徑36的空間填充路徑可以通過(guò)以下來(lái)實(shí)現(xiàn)通過(guò)存儲(chǔ)在查找表中的 路徑36中的點(diǎn)的明確說(shuō)明、通過(guò)遞歸定義,通過(guò)計(jì)算路徑的算法、通過(guò)映射值的表、或者這 些方法的混合。作為示例,圖中所示的特定路徑36可以利用簡(jiǎn)單遞歸定義來(lái)實(shí)現(xiàn)。偽隨機(jī)路徑在實(shí)施例中,可以使用偽隨機(jī)路徑。在該實(shí)施例中,可以通過(guò)執(zhí)行偽隨機(jī)發(fā)生器算 法來(lái)計(jì)算陣列中沿著路徑的連續(xù)點(diǎn)。優(yōu)選地,可以使用基于密鑰的偽隨機(jī)算法,其中,產(chǎn)生 的路徑取決于存儲(chǔ)在處理器中、并在程序產(chǎn)生時(shí)使用但另外保持秘密的密鑰。由于用于產(chǎn) 生路徑的偽隨機(jī)算法是公知的, 因此只要密鑰保持秘密,就不會(huì)危及處理器的安全。不同的 密鑰可以使用在不同的集成電路中,或者分別使用在集成電路的不同組中。如果路徑不限于陣列中鄰近點(diǎn)之間的步長(zhǎng)和分離的范圍,則可以通過(guò)使用偽隨機(jī) 置換算法(置換算法是一種將來(lái)自集合的地址A映射到來(lái)自該集合的地址f (A)上以使得 不會(huì)有兩個(gè)地址被映射到相同地址的算法)來(lái)實(shí)現(xiàn)映射。實(shí)質(zhì)上已知許多偽隨機(jī)置換算法 實(shí)現(xiàn)方式,例如,線性反饋偏移寄存器(LFSR)算法、Xn+1 = A*X+B類型的線性迭代公式、等 等。在這種情況下,可以保持LFSR的方法發(fā)生器多項(xiàng)式或值A(chǔ)、B和/或LSFR的初始狀態(tài) 作為集成電路中的秘密密鑰信息。在實(shí)施例中,偽隨機(jī)置換算法可以與范圍內(nèi)映射g (f (A)) 和范圍選擇映射h(f (A))相組合,范圍內(nèi)映射g(f (A))從置換的地址f(A)中導(dǎo)出范圍內(nèi)地 址,范圍選擇映射h(f (A))從置換的地址f(A)中導(dǎo)出范圍選擇。通過(guò)映射到范圍的集合可 以實(shí)現(xiàn)混淆提高,該集合中的范圍與其他范圍彼此分離,其他范圍是范圍選擇映射h沒(méi)有 選擇的范圍。范圍內(nèi)映射可以是簡(jiǎn)單映射,例如通過(guò)從置換的地址中選擇比特集合而獲得 映射。類似地,范圍選擇映射可以是簡(jiǎn)單的,例如,采用置換的地址的其他比特,并通過(guò)任何 適合的函數(shù)根據(jù)這些比特來(lái)計(jì)算范圍選擇,或者使用查找表來(lái)確定范圍選擇。這樣的算法可以通過(guò)映射電路164中的算術(shù)和/或邏輯電路來(lái)實(shí)現(xiàn),映射電路164 與密鑰存儲(chǔ)器組合以提供計(jì)算所需的密鑰。備選地,可以預(yù)先執(zhí)行地址的計(jì)算,并且可以將 地址存儲(chǔ)在映射電路164中的查找存儲(chǔ)器。在后一種情況下,可以存儲(chǔ)真隨機(jī)映射。通常,偽隨機(jī)置換不一定產(chǎn)生與路徑36相對(duì)應(yīng)的地址步長(zhǎng),這些地址步長(zhǎng)由η維 陣列中的鄰域之間的步長(zhǎng)組成。在實(shí)施例中,路徑受限于這樣的步長(zhǎng)??梢酝ㄟ^(guò)為每個(gè)地 址提供具有密鑰信息的η (η是陣列的維數(shù))個(gè)比特的密鑰流/秘密映射來(lái)定義這種類型的 路徑,η個(gè)比特指示路徑在每個(gè)點(diǎn)移動(dòng)的方向??梢灶A(yù)先隨機(jī)或偽隨機(jī)選擇這樣的密鑰流 /秘密映射,強(qiáng)制定義不具有折返的路徑。如所述,偽隨機(jī)算法可以是基于密鑰的,取決于 (較小)密鑰??梢詫@得的密鑰流/秘密映射存儲(chǔ)在集成電路中的存儲(chǔ)器中。當(dāng)更新指 令地址時(shí),針對(duì)該地址的η比特可以在處理器中獲取到,并用于確定至下個(gè)地址值的步長(zhǎng)。例如,η個(gè)比特中的每一個(gè)應(yīng)當(dāng)與比特所選的相應(yīng)步長(zhǎng)部分相對(duì)應(yīng),并且地址的步 長(zhǎng)應(yīng)當(dāng)是η個(gè)比特指示的所選步長(zhǎng)部分之和。這可以使用存儲(chǔ)器、查找電路以及加法器在 映射電路164中實(shí)現(xiàn),存儲(chǔ)器存儲(chǔ)了針對(duì)相應(yīng)指令地址(指令地址組)的η個(gè)比特密鑰部 分,并可以由(部分)當(dāng)前指令地址來(lái)尋址,查找電路查找與η個(gè)比特相對(duì)應(yīng)的步長(zhǎng)部分, 加法器用于將步長(zhǎng)部分相加并與當(dāng)前指令地址相加,以計(jì)算下個(gè)指令地址。當(dāng)使用這樣的η個(gè)比特密鑰部分時(shí),例如,一個(gè)步長(zhǎng)部分可以具有加1和減1的可選值,另一步長(zhǎng)部分可以具有加和減地址范圍對(duì)之間的間隔的可選值??蛇x地,可以利用路 徑不折返的事實(shí)來(lái)減少每點(diǎn)的密鑰比特?cái)?shù)目。因此,在二維示例中,針對(duì)每個(gè)指令地址,僅 需要對(duì)3個(gè)可能的步長(zhǎng)值進(jìn)行編碼,而不是4個(gè)。相應(yīng)地,例如可以使用5個(gè)比特來(lái)對(duì)針對(duì) 三個(gè)指令地址的步長(zhǎng)值進(jìn)行編碼??梢允褂糜糜趥坞S機(jī)定義η維空間中的路徑的任何其他類型的算法。程序流控制單元可以通過(guò)根據(jù)跳轉(zhuǎn)間隔(跳轉(zhuǎn)原始與跳轉(zhuǎn)目標(biāo)之間的地址的數(shù) 目)重復(fù)計(jì)算和求和沿著路徑的連續(xù)步長(zhǎng),來(lái)執(zhí)行跳轉(zhuǎn)指令。如這里所使用的,術(shù)語(yǔ)跳轉(zhuǎn)指 令包括分支指令。跳轉(zhuǎn)地址計(jì)算的缺點(diǎn)是,跳轉(zhuǎn)可以使處理器延遲。在備選實(shí)施例中,程序 流控制單元包括跳轉(zhuǎn)目標(biāo)存儲(chǔ)器,其中存儲(chǔ)了跳轉(zhuǎn)指令的目標(biāo)的地址。例如在加載程序時(shí), 可以對(duì)這些地址進(jìn)行計(jì)算。在該實(shí)施例中,當(dāng)程序流控制單元遇到跳轉(zhuǎn)指令時(shí),訪問(wèn)跳轉(zhuǎn)目 標(biāo)存儲(chǔ)器,并用跳轉(zhuǎn)目標(biāo)來(lái)代替當(dāng)前指令地址。在另一實(shí)施例中,例如,來(lái)自跳轉(zhuǎn)指令的跳轉(zhuǎn)信息可以通過(guò)以下操作來(lái)直接使用 將來(lái)自跳轉(zhuǎn)指令的跳轉(zhuǎn)間隔與當(dāng)前指令地址相加,或者用來(lái)自跳轉(zhuǎn)指令的跳轉(zhuǎn)地址代替當(dāng) 前指令地址。在該實(shí)施例中,預(yù)處理器對(duì)程序進(jìn)行預(yù)處理,以根據(jù)處 理器的密鑰來(lái)代替跳轉(zhuǎn) 指令信息。在預(yù)處理期間,預(yù)處理器可以是在任何可編程計(jì)算機(jī)上執(zhí)行的預(yù)處理程序,檢測(cè) 預(yù)處理程序中的跳轉(zhuǎn)指令、根據(jù)處理器的密鑰計(jì)算檢測(cè)到的指令的跳轉(zhuǎn)目標(biāo),并且預(yù)處理 器根據(jù)計(jì)算的跳轉(zhuǎn)目標(biāo)來(lái)代替跳轉(zhuǎn)指令中的跳轉(zhuǎn)信息。遞歸定義注意,定義路徑的另一種可能的方法是通過(guò)遞歸定義。概念上,遞歸定義使用“單 元”,即,空間的一部分(單元在下文中將被稱作“區(qū)塊”(tile))??梢远x許多不同單元 類型。單元類型的定義定義了該類型單元的形狀,而不指定其比例,以及如何將該類型的每 個(gè)單元再劃分成具有更小比例的各種類型的單元,可選地,劃分成這些單元的旋轉(zhuǎn)和/或 鏡像版本。通過(guò)重復(fù)應(yīng)用這樣的再劃分,可以將單元分級(jí)地再劃分成更多更小的單元。在遞歸定義中,將路徑劃分成相應(yīng)單元中的路徑部分,然后以分級(jí)再劃分方式將 這些路徑部分劃分成更小單元中的更小路徑部分。因此,確保完全或接近完全覆蓋空間中 的所有點(diǎn)被劃分成更多更小比例的再劃分問(wèn)題。對(duì)于每種類型的單元,單元內(nèi)路徑的入口 點(diǎn)和出口點(diǎn)的位置可以根據(jù)該路徑在單元邊界處的位置(相對(duì)于單元的角)來(lái)定義。定義 單元的再劃分,使得單元的入口和出口點(diǎn)與再劃分單元的入口點(diǎn)和出口點(diǎn)相對(duì)應(yīng),并且可 選地,在倒置單元中的路徑方向之后,連續(xù)單元的內(nèi)部出口點(diǎn)和入口點(diǎn)一致。當(dāng)空間包含點(diǎn) 陣列時(shí),分級(jí)再劃分的單元包含更多更小的子陣列。對(duì)于相當(dāng)小尺寸的子陣列,可以顯式地 定義路徑,該路徑覆蓋子陣列中的所有點(diǎn)。因此,通過(guò)分級(jí)定義了整個(gè)路徑。盡管已經(jīng)根據(jù) 單元給出了該定義,但是應(yīng)認(rèn)識(shí)到,針對(duì)相同路徑的定義可以采用任何形式。作為一個(gè)示 例,可以使用L體系語(yǔ)法。例如,圖3a的空間填充路徑36可以通過(guò)一種類型的方形區(qū)塊來(lái)定義。最高級(jí)別 單元(區(qū)塊)包含8X8點(diǎn)陣列。將最高級(jí)別單元再劃分成4個(gè)中間級(jí)別單元,每個(gè)中間級(jí) 別單元包含4X4子陣列。然后可以將每個(gè)中間級(jí)別單元再劃分成4個(gè)低級(jí)別區(qū)塊,每個(gè)低 級(jí)別區(qū)塊包含2X2子陣列。每個(gè)最低級(jí)別單元中的路徑可以通過(guò)對(duì)同一基本路徑的序列 進(jìn)行旋轉(zhuǎn)、鏡像和/或倒置來(lái)獲得??梢酝ㄟ^(guò)使用不同形狀的單元和/或不同的再劃分以及針對(duì)最小單元不同的顯式定義的路徑(最小單元可以是比圖3a的示例中的單元更大的單元,因此例如,可以針對(duì)4X4單元或8X8單元來(lái)顯式定義路徑),根據(jù)遞歸定義來(lái)產(chǎn)生路徑的無(wú)限變化。顯式定義 的路徑不需受限于具有沿χ方向和y方向的步長(zhǎng)也可以使用對(duì)角線步長(zhǎng)或者甚至其他鄰 域的步長(zhǎng)。此外,不同的顯式定義的路徑可以用于位于相同點(diǎn)陣列中不同位置處的相同類 型的單元。盡管為了說(shuō)明的目的已經(jīng)給出了針對(duì)二維路徑的示例,但是應(yīng)當(dāng)認(rèn)識(shí)到,可以使 用更高維空間中的路徑??梢酝ㄟ^(guò)查找操作和/或計(jì)算確定陣列中點(diǎn)的坐標(biāo)作為沿著路徑的位置的函數(shù), 查找操作和/或計(jì)算是因?yàn)檫@種路徑不明顯。根據(jù)s,可以確定包含該點(diǎn)的分級(jí)再劃分的各 個(gè)單元。當(dāng)將每個(gè)單元?jiǎng)澐殖?的冪(例如,4)個(gè)更小單元,并且針對(duì)更小單元定義2的冪 個(gè)點(diǎn)的路徑時(shí),s的數(shù)字表示的連續(xù)比特組標(biāo)識(shí)沿著路徑在位置s處放置點(diǎn)的單元,以及 這些單元相對(duì)于更大單元的位置的定向(例如,在圖3中,s的數(shù)字表示具有6個(gè)比特,其 中兩個(gè)最高有效比特確定4X4單元、中間的兩個(gè)比特確定4X4單元內(nèi)的2X2單元、兩個(gè) 最低有效比特確定單元內(nèi)的位置)。更一般地,沿著路徑位置s處的點(diǎn)所屬的最高級(jí)別的單 元的索引s(0)是從s/N(l)的整數(shù)部分獲得的,即s除以次高級(jí)別單元中的點(diǎn)的數(shù)目N(I)。 點(diǎn)所屬的次高級(jí)別單元的索引s(l)是從整數(shù)相除R(l)/N(2)中獲得,其中,余數(shù)R(I)= S-N(I)^s(O),即s乘以第三高級(jí)別單元中的點(diǎn)的數(shù)目,依此類推。如所述,當(dāng)N⑴是2的 冪時(shí),該量是從s的數(shù)字表示中獲得的比特組。“i”級(jí)別下每個(gè)單元中的點(diǎn)的數(shù)目N(i)可 以根據(jù)被再劃分的較低級(jí)別單元N(i+1)的點(diǎn)的數(shù)目之和來(lái)確定??梢栽诓檎冶黼娐分斜硎驹賱澐值亩x,查找表電路存儲(chǔ)了再劃分的每個(gè)單元的 信息P(C)(被標(biāo)記為c的這些單元的索引),該信息P(c)表示單元類型、該單元相對(duì)于被 其劃分的更大單元的位置、該單元相對(duì)于所述更大單元的定向,以及相對(duì)于所述更大單元 該單元中的路徑所遵循(向后或向前)的方向??蛇x地,P還取決于被再劃分的單元的類 型??梢允褂迷搯卧乃饕齭 (0),利用查找表電路來(lái)獲得最高級(jí)別單元的信息P (s (0))。接 著的m個(gè)比特可以用于查找再劃分的次高級(jí)別下的單元的類似信息P(s(l))。與信息Q(O) (表示相對(duì)于最高級(jí)別單元再劃分的次高級(jí)別單元的位置、相對(duì)定向、以及路徑方向)相結(jié) 合,信息P’可以用于確定信息Q(I) = f(Q(0),P(s(l))),Q(l)表示相對(duì)于最高級(jí)別單元, 次高級(jí)別下單元的位置、定向以及路徑方向,對(duì)于“i”所指示的連續(xù)級(jí)別下的信息Q(i)依 此類推。函數(shù)“f”表示偏離、旋轉(zhuǎn)和路徑方向的合成,并且通過(guò)算術(shù)計(jì)算或查找(可以與P 的查找相組合)來(lái)確定。因此,陣列中的位置可以從索引s(i)來(lái)獲得,例如s的數(shù)字表示 的連續(xù)比特組。備選地,遞增計(jì)算可以用于沿著路徑的連續(xù)點(diǎn)。如將認(rèn)識(shí)到的,每次s遞增時(shí),僅 最低級(jí)別索引s(i)(例如,來(lái)自s的數(shù)字表示的比特組)改變。當(dāng)較高級(jí)別的索引i’不改 變時(shí),這些較高級(jí)別的信息Q(i’)也不改變。在這種情況下,針對(duì)沿著路徑的位置s的陣列 中的位置可以通過(guò)以下操作來(lái)確定以根據(jù)最低級(jí)別信息P而確定的偏移量,來(lái)更新針對(duì) 位置s-1的先前位置,或者通過(guò)將與該最低級(jí)別的偏移量添加至最低級(jí)別單元的基點(diǎn)。僅 需要針對(duì)s值內(nèi)的所選步長(zhǎng)來(lái)更新其他級(jí)別的信息Q(i’)。當(dāng)這樣的步長(zhǎng)出現(xiàn)時(shí),可以預(yù) 先計(jì)算各個(gè)級(jí)別的未來(lái)值Q(i)以供使用,或者當(dāng)這樣的步長(zhǎng)出現(xiàn)時(shí)可以計(jì)算未來(lái)值Q(i)。應(yīng)當(dāng)強(qiáng)調(diào),對(duì)于指令地址的映射,僅在可視化時(shí),路徑是重要的。陣列中的點(diǎn)的一 個(gè)坐標(biāo)的一部分表示目標(biāo)地址范圍中的位置,剩余部分以及剩余的一個(gè)或多個(gè)坐標(biāo)表示范圍的選擇,即范圍的基地址。原始指令地址A與沿著路徑的位置“S”相對(duì)應(yīng),例如根據(jù)s = A-AO,其中AO是基地址。因此,查找信息P和函數(shù)f定義范圍的選擇以及范圍中的位置作 為原始指令地址A的函數(shù) 加密在已知定義了映射的有關(guān)信息的情況下,當(dāng)然能夠重構(gòu)程序序列。為了避免這一 點(diǎn),優(yōu)選地通過(guò)將該信息包括在程序流控制單元中,保持該信息秘密,使得不能容易地讀出 該信息。為了提高對(duì)秘密的保護(hù),不同的映射,并因此不同重排序的程序可以用于不同的集 成電路或集成電路組。為了實(shí)現(xiàn)較大范圍的可能映射,可以使用具有最低級(jí)別信息P的相對(duì)較大單元, 相對(duì)較大單元定義了用于不同處理器的不同的基本路徑。在一個(gè)實(shí)施例中,整個(gè)地址空間 可以被處理為一個(gè)這種最低級(jí)別單元,使得高效地使用非(多級(jí)別)遞歸定義。根據(jù)圖3a的示例,例如,8X8個(gè)點(diǎn)的最低級(jí)別單元(區(qū)塊)可以與查找電路一起 使用,查找電路定義了沿著該單元中的路徑的連續(xù)位置。處理器的查找電路中的信息使得 處理器能夠執(zhí)行已經(jīng)被相應(yīng)重排序的程序。為了更多地提高秘密性,優(yōu)選地,在相同映射的不同單元中使用不同的基本路徑。 這對(duì)應(yīng)于使用具有備選、不同基本路徑的更多不同類型的單元,即使這些單元具有相同的 形狀。在這種情況下,信息P中再劃分的定義可以定義劃分成不同類型單元的劃分。可選 地,這可以在多個(gè)級(jí)別的單元下進(jìn)行。如果針對(duì)處理器的程序在被分發(fā)至處理器之前根據(jù) 相應(yīng)映射進(jìn)行了重排序,這種使用備選的再劃分單元類型以及各種基本路徑的定義均在處 理器內(nèi)保持秘密。這樣,可以將程序劃分成多個(gè)指令地址序列,多個(gè)指令地址序列在秘密信息的控 制下被映射到目標(biāo)地址。秘密信息的不同部分可以用于相應(yīng)序列,使得針對(duì)每個(gè)序列的秘 密信息僅影響該序列。這樣,一個(gè)序列的指令的順序的重構(gòu)并不能使得重構(gòu)其他序列。用于遞歸映射的硬件適應(yīng)如上所述,使用空間填充路徑的混淆可以用于轉(zhuǎn)換程序,包括將分支指令添加至 來(lái)自于塊結(jié)束的修改后的地址。在這種情況下,可以使用如圖Ia所示的程序流控制單元。 在備選實(shí)施例中,數(shù)據(jù)處理裝置可以適用于執(zhí)行地址映射的一部分。在這種情況下,程序轉(zhuǎn) 換可以重新排列程序的一部分,而不包括附加信息。在這種情況下,可以使用如圖Ia或Ib 所示的程序流控制單元。在一個(gè)實(shí)施例中,可以根據(jù)地址映射來(lái)重新排列指令,地址映射是根據(jù)L語(yǔ)法利 用遞歸定義而獲得的。在該實(shí)施例中,程序流控制單元16可以具有棧結(jié)構(gòu),該棧結(jié)構(gòu)被配 置為根據(jù)利用遞歸定義而獲得地址映射更新地址以獲得連續(xù)指令。圖4示出了用于使用空間填充路徑執(zhí)行更新的程序流控制單元的實(shí)施例的示例。 程序流控制單元包括第一查找表電路(LUT電路40),定義了沿著通過(guò)最小尺寸區(qū)塊的路 徑的位置;以及第二查找表電路(LUT電路42),定義與較大區(qū)塊的再劃分下的連續(xù)區(qū)塊有 關(guān)的信息。此外,程序流控制單元16包括加法器43、地址寄存器44、路徑計(jì)數(shù)器45、棧存儲(chǔ) 器46、棧更新電路47、分支指令處理器48、以及復(fù)用器49。地址寄存器44具有耦合至加法器43的第一輸入的輸出。加法器43的輸出形成 程序流控制單元的指令地址輸出,并耦合至地址寄存器44的輸入。分支指令處理器48具有用于接收分支指令的輸入,以及耦合至路徑計(jì)數(shù)器45的輸出。在操作中,在連續(xù)指令周期內(nèi),將指令地址連續(xù)存儲(chǔ)在地址寄存器44中。分支指令處理器48檢測(cè)從指令發(fā)出電路(未示出)接收到的指令是否包括分支命令。如果沒(méi)有 檢測(cè)到分支,則加法器43加入來(lái)自第一 LUT電路40的遞增來(lái)計(jì)算指令地址。棧存儲(chǔ)器46具有耦合至第二 LUT電路42的輸出。第二 LUT電路42和路徑計(jì)數(shù) 器45具有耦合至第一 LUT電路40的輸入。第一 LUT電路40具有耦合至加法器43的第二 輸入并耦合至棧更新電路47的輸出。第二 LUT電路具有經(jīng)由棧更新電路47耦合至棧存儲(chǔ) 器46的輸入的輸出。第一 LUT電路40根據(jù)最小尺寸的區(qū)塊中的空間填充路徑存儲(chǔ)遞增的地址值。第 一 LUT電路40還存儲(chǔ)了區(qū)塊中路徑結(jié)束的指示。路徑計(jì)數(shù)器45向第一 LUT電路40指示 路徑中的位置,并且第二 LUT電路42指示該路徑的類型和定向。因此,第一 LUT電路40向 加法器43輸出遞增值,在加法器43中將該遞增值與來(lái)自于地址寄存器44的地址值相加。第二 LUT電路42針對(duì)每種類型的區(qū)塊存儲(chǔ)了信息P,信息P與較大區(qū)塊的再劃分 下的連續(xù)區(qū)塊的類型、相關(guān)定向等有關(guān)。棧存儲(chǔ)器46被配置為存儲(chǔ)有關(guān)連續(xù)較小區(qū)塊的信 息的棧。在實(shí)施例中,棧存儲(chǔ)器46中的信息可以是數(shù)據(jù)(T,A,I)的組合,其中,T指示區(qū)塊 的類型,A指示區(qū)塊的定向、以及I指示區(qū)塊的再劃分的索引??梢葬槍?duì)連續(xù)較大區(qū)塊存儲(chǔ) 這種組合。棧存儲(chǔ)器46向第二 LUT電路42輸出與當(dāng)前區(qū)塊有關(guān)的信息。在操作期間,在每個(gè)指令周期內(nèi)遞增路徑計(jì)數(shù)器45。一旦來(lái)自路徑計(jì)數(shù)器45的計(jì) 數(shù)達(dá)到與最小尺寸區(qū)塊中的路徑的結(jié)束相對(duì)應(yīng)的計(jì)數(shù)值時(shí),第一 LUT電路40將該指示提供 給棧更新電路47。相應(yīng)地,棧更新電路47更新在棧存儲(chǔ)器46中的棧頂部處的區(qū)塊。這可 以通過(guò)遞增再劃分的索引I來(lái)進(jìn)行,除非第二 LUT電路42指示該索引值與最后的再劃分區(qū) 塊相對(duì)應(yīng)。當(dāng)遞增索引值時(shí),使得第二 LUT電路42向第一 LUT電路40輸出下個(gè)區(qū)塊的類 型和定向。當(dāng)索引值與最后的再劃分區(qū)塊相對(duì)應(yīng)時(shí),棧更新電路47以遞歸方式進(jìn)行操作。頂 層被視為第一級(jí)別,頂層之下的棧層被視為較低的第二級(jí)別。如果棧更新電路47遞增較低 的第二級(jí)別的信息中的索引,則響應(yīng)于該遞增索引使用第二 LUT電路42以第一級(jí)別選擇新 信息,將第一級(jí)別的索引設(shè)置為其初始值。如果較低的第二級(jí)別的索引同樣在其范圍的結(jié) 束處,則應(yīng)用該操作,將較低的第二級(jí)別作為第一級(jí)別,并且將下一個(gè)較低的級(jí)別作為較低 的第二級(jí)別,依此類推。當(dāng)分支指令處理器48檢測(cè)到從指令發(fā)出電路(未示出)接收到的指令包括分支 命令時(shí),分支指令處理器48計(jì)算路徑計(jì)數(shù)器45和棧存儲(chǔ)器46的新的相應(yīng)內(nèi)容,并且在執(zhí) 行分支指令時(shí)相應(yīng)地代替路徑計(jì)數(shù)器45和棧存儲(chǔ)器46的內(nèi)容??蛇x地,當(dāng)分支具有小分 支間隔時(shí),分支指令處理器48可以使與該間隔相對(duì)應(yīng)的一系列計(jì)數(shù)脈沖應(yīng)用于路徑計(jì)數(shù) 器45,而同時(shí)禁用相應(yīng)的插入指令的執(zhí)行。為了減少執(zhí)行分支所需的時(shí)間,分支指令可以包括指示分支以及分支之后的路徑 計(jì)數(shù)值的參數(shù)。在應(yīng)用該備選方案的實(shí)施例中,分支指令處理器48可以被配置為,在分支 指令的控制下將來(lái)自于分支指令的數(shù)據(jù)加載到路徑計(jì)數(shù)器45和棧存儲(chǔ)器46中。應(yīng)當(dāng)認(rèn)識(shí)到,圖4的電路具有以下效果確定下個(gè)指令地址所需的時(shí)間可以根據(jù) 是否在各個(gè)級(jí)別下到達(dá)區(qū)塊中的末端還是執(zhí)行分支指令而變化。棧更新電路47可以被配置為向數(shù)據(jù)處理電路的停止操作(如果發(fā)生該操作)發(fā)出停止信號(hào)。圖5示出了程序流控制單元,該程序流控制單元具有計(jì)數(shù)器50、分支執(zhí)行單元52、 多個(gè)查找電路54以及多個(gè)組合器電路56、58。計(jì)數(shù)器50具有時(shí)鐘輸入CL,以及耦合至查 找電路54中相應(yīng)的一個(gè)的用于連續(xù)計(jì)數(shù)比特組的輸出。分支執(zhí)行單元52接收計(jì)數(shù)比特 組,以用于計(jì)算分支目標(biāo)(為了清楚起見(jiàn),未顯式示出連接)。第一組合器電路56的輸入耦 合至針對(duì)最高有效比特組的查找電路54的輸出和針對(duì)次高有效比特組的查找電路54的輸 出。其他組合器電路56、58分別與計(jì)數(shù)器的比特組相關(guān)聯(lián),并且其輸入耦合至針對(duì)該比特 組的查找電路54的輸出和與次高有效比特組相關(guān)的組合器電路56的輸出。與最低有效比 特組相關(guān)聯(lián)的組合器電 路58向指令發(fā)出單元(未示出)輸出目標(biāo)地址。在操作中,計(jì)數(shù)器50進(jìn)行計(jì)數(shù)??蛇x地,指令解碼器(未示出)可以用于根據(jù)指令 長(zhǎng)度來(lái)控制計(jì)數(shù)器的遞增,但是如果所有指令具有相同大小或者如果它們以等間隔存儲(chǔ), 則不必進(jìn)行上述操作。不同的查找電路54和組合器電路56、58執(zhí)行目標(biāo)地址計(jì)算和組合 器電路56、58針對(duì)不同級(jí)別的單元并行地執(zhí)行目標(biāo)地址計(jì)算。查找電路54根據(jù)路徑索引 高效地實(shí)現(xiàn)信息P的應(yīng)用,并且組合器電路56、58實(shí)現(xiàn)復(fù)合函數(shù)f(Q,P)的應(yīng)用。備選地, 使用寄存器來(lái)存儲(chǔ)針對(duì)不同級(jí)別的結(jié)果,查找電路54和組合器電路56、58可以被組合成一 個(gè)查找電路54和組合器電路56、58。這可以獲得圖4的體系結(jié)構(gòu)。圖5a示出了具有寄存器的電路的流水線版本,其中寄存器在組合器電路56、58之 間并且在針對(duì)最高有效比特組的查找電路54與第一組合器電路之間。在這種情況下,查找 電路54組合器電路56、58可以被配置為執(zhí)行查找和針對(duì)比特組的下個(gè)未來(lái)值執(zhí)行值的組 合,寄存器響應(yīng)于對(duì)比特組至未來(lái)值的即將轉(zhuǎn)變的檢測(cè),在檢測(cè)到即將轉(zhuǎn)變時(shí)將新的組合 結(jié)果拷貝到寄存器中。可選地,圖4和5的程序流控制單元的查找電路可以是合并可編程的,或者包含非 易失性存儲(chǔ)器來(lái)定義查找函數(shù)。因此,處理器可以具備定義了映射的秘密信息。例如,在圖5的程序流控制單元中,針對(duì)最低有效比特組的查找電路54可以被編 程為,定義不同類型的最低級(jí)別單元的多個(gè)備選基本路徑部分。因此,較高級(jí)別查找電路54 所進(jìn)行的單元類型選擇具有以下效果在映射中使用不同路徑。類似地,針對(duì)次高有效比特組的查找電路54也是可編程的,使得可以在不同處理 器中使用再劃分成單元的不同在劃分。這使得更難重構(gòu)程序。備選地,或另外,族中的不同設(shè)備可以通過(guò)在不同設(shè)備中使用沿著路徑的不同開(kāi) 始點(diǎn)來(lái)實(shí)現(xiàn)。這可以通過(guò)在程序流控制單元16 (例如,ROM)中添加電路實(shí)現(xiàn),該電路表示 針對(duì)路徑計(jì)數(shù)器45的計(jì)數(shù)和棧存儲(chǔ)器46中的棧的初始值,并使程序流控制單元16在開(kāi)始 執(zhí)行程序之前加載這些初始值。其他硬件適應(yīng)已經(jīng)使用圖4和5示意了實(shí)施例,其中,對(duì)所有執(zhí)行的地址進(jìn)行映射。作為備選方 案,可以僅對(duì)分支目標(biāo)進(jìn)行映射。在這種情況下,每個(gè)分支指令可以包括目標(biāo)編號(hào)。如針對(duì) 圖4的上下文中的分支的描述,分支指令處理器48執(zhí)行將該編號(hào)轉(zhuǎn)換成地址的計(jì)算。作為 另一實(shí)施例,可以僅針對(duì)指令地址的一部分使用映射,而其余部分可以在無(wú)需映射的情況 下使用。在實(shí)施例中,僅映射比特組(例如,16個(gè)比特),可以在無(wú)需映射的情況下使用程 序計(jì)數(shù)器的次高比特。這使得能夠利用有限量的電路映射更大地址空間,并仍混淆局部程序結(jié)構(gòu)。例如,可以對(duì)最低η個(gè)比特進(jìn)行映射,以使程序最大程度難以理解,或者可以對(duì)兩 個(gè)有效級(jí)別之間的比特進(jìn)行映射,使得針對(duì)次低有效比特保持高速緩存局部性。其他手段可以用于更進(jìn)一步混淆程序。因此,指令可以在分發(fā)之前進(jìn)行加密,并在 執(zhí)行之前在指令發(fā)出電路中進(jìn)行解密。實(shí)踐要求保護(hù)的本發(fā)明的本領(lǐng)域技術(shù)人員通過(guò)對(duì)附圖、公開(kāi)以及所附權(quán)利要求的 研究,可以理解和實(shí)現(xiàn)所公開(kāi)的實(shí)施例的其他變型。在權(quán)利要求中,詞語(yǔ)“包括”不排除其 他元件或步驟。單個(gè)處理器或其他單元可以實(shí)現(xiàn)權(quán)利要求中引述的若干項(xiàng)的功能。事實(shí)僅 在于,在彼此不同的獨(dú)立權(quán)利要求中引述的特定手段并不指示這些手段的組合是不利的。 計(jì)算機(jī)程序可以存儲(chǔ)/分布在適合的介質(zhì)上,例如,與其他硬件的一部分一同提供或作為 其他硬件的一部分提供的光存儲(chǔ)介質(zhì)或固態(tài)介質(zhì),但是也可以以其他形式分布,例如經(jīng)由 互聯(lián)網(wǎng)或其他有線或無(wú)線電信系統(tǒng)。權(quán)利要求中任何參考數(shù)字不應(yīng)視為對(duì)本發(fā)明范圍的限 制。
權(quán)利要求
一種數(shù)據(jù)處理設(shè)備,包括 功能單元(14),用于執(zhí)行來(lái)自于存儲(chǔ)器(10)的指令; 地址輸出,用于向存儲(chǔ)器(10)提供指令的目標(biāo)地址; 程序流控制單元(16),被配置為確定用于提供給地址輸出的目標(biāo)地址,程序流控制單元(16)被配置為在程序中邏輯上連續(xù)位置處的指令的目標(biāo)地址之間引入位置相關(guān)大小和/或方向的地址步長(zhǎng),所述地址步長(zhǎng)的至少一部分與指令大小不相對(duì)應(yīng)。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中,程序流控制單元(16)包括用于表示可 編程秘密信息的電路(161、164),程序流控制單元(16)被配置為根據(jù)所述秘密信息來(lái)選擇 地址步長(zhǎng)。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理設(shè)備,其中,用于表示可編程秘密信息的電路(161、 164)包括查找存儲(chǔ)器,程序流控制單元(16)被配置為使用從查找存儲(chǔ)器查找到的相應(yīng)信 息確定每個(gè)相應(yīng)指令的目標(biāo)地址。
4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)處理設(shè)備,其中,程序流控制單元(16)包括程序計(jì)數(shù)器(160),被配置為除非執(zhí)行跳轉(zhuǎn)指令,否則在連續(xù)指令周期內(nèi)遞增程序計(jì)數(shù) 器值;以及映射電路(164),耦合在程序計(jì)數(shù)器(160)與存儲(chǔ)器的輸出之間,所述映射電路被配置 為根據(jù)程序計(jì)數(shù)器值來(lái)確定目標(biāo)地址。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中,程序流控制單元(16)包括-程序計(jì)數(shù)器(160),用于基于程序計(jì)數(shù)器值提供指令地址,以及-更新單元(161),耦合至程序計(jì)數(shù)器,并被配置為根據(jù)先前程序計(jì)數(shù)器值確定選擇的 更新值,所述程序計(jì)數(shù)器(160)被配置為除非執(zhí)行跳轉(zhuǎn)指令,否則在更新值的控制下執(zhí)行 程序計(jì)數(shù)器值的更新。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中,程序流控制單元(16)被配置為將按照 偽隨機(jī)重置順序的邏輯上連續(xù)指令分配給連續(xù)目標(biāo)地址集合。
7.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中,程序流控制單元(16)被配置為以相同 頻率在邏輯連續(xù)指令的目標(biāo)地址之間產(chǎn)生彼此符號(hào)相反的地址步長(zhǎng)。
8.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理設(shè)備,其中,連續(xù)原始指令地址的序列(32)被分配 給相應(yīng)目標(biāo)地址集合,其中,連續(xù)原始指令地址被映射到目標(biāo)地址之間的連續(xù)地址步長(zhǎng),所 述集合中的目標(biāo)地址處于多個(gè)非交疊地址范圍(33a-d)之中,所述映射用指令填充每個(gè)范 圍(33a_d)的至少一半,連續(xù)地址步長(zhǎng)包括第一地址步長(zhǎng),至少在范圍(33a_d)中的第一 范圍內(nèi);以及第二地址步長(zhǎng),在所述第一地址步長(zhǎng)之間,并至少在范圍(33a_d)中的第二范 圍內(nèi)。
9.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理設(shè)備,其中,將原始指令地址分配到目標(biāo)地址與將 連續(xù)原始指令地址映射到沿著η維陣列中的點(diǎn)的路徑(36)的連續(xù)位置相對(duì)應(yīng),其中,η大 于1,所述路徑在陣列的所有維度上蜿蜒,并且將沿著所述陣列的相應(yīng)行、行組或行部分的 位置映射到范圍(33a-d)中的相應(yīng)范圍,路徑由陣列中相鄰位置之間的步長(zhǎng)組成,訪問(wèn)陣 列的每行中至少一半的點(diǎn)。
10.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理設(shè)備,其中,指令序列(32)是超級(jí)序列(30)的適 當(dāng)子集,超級(jí)序列(30)包括在秘密信息的控制下被映射到目標(biāo)地址的指令地址的其他序列,在所述范圍(33a_d)內(nèi)的至少一個(gè)映射受到秘密信息的一部分的控制,秘密信息的所 述一部分不會(huì)影響其他序列的映射。
11.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理設(shè)備,其中,指令序列(32)是超級(jí)序列(30)的適 當(dāng)子集,超級(jí)序列(30)包括被映射到其他地址范圍中的目標(biāo)地址的指令地址的其他序列, 非交疊地址范圍(33a-d)由所述其他地址范圍彼此分離,所述其他地址范圍介于非交疊地 址范圍(33a-d)之間。
12.根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理設(shè)備,被配置為基于連續(xù)級(jí)別單元的分級(jí)來(lái)確定 目標(biāo)地址,每個(gè)單元與相應(yīng)范圍集合相對(duì)應(yīng),相繼較低級(jí)別下的單元與范圍的子集相對(duì)應(yīng), 范圍的子集是較高級(jí)別的單元集合的子集,分級(jí)的單元與索引相關(guān)聯(lián),所述設(shè)備包括-程序計(jì)數(shù)器;-查找電路,提供再劃分信息和路徑信息,所述再劃分信息定義范圍集合作為索引值的 函數(shù),所述路徑信息在最低級(jí)別單元的范圍集合內(nèi)定義相應(yīng)索引值所映射到的目標(biāo)地址中 的相應(yīng)地址,查找電路具有耦合至用于接收索引值的程序計(jì)數(shù)器的輸入;_組合電路,被配置為對(duì)在程序計(jì)數(shù)器控制下已被訪問(wèn)的不同級(jí)別的再劃分信息進(jìn)行 組合,以定義針對(duì)原始指令地址中的至少一個(gè)的最低級(jí)別單元的范圍集合,并且對(duì)訪問(wèn)的 路徑信息進(jìn)行組合,以在通過(guò)組合訪問(wèn)的再劃分信息而定義的范圍集合內(nèi)選擇針對(duì)至少一 個(gè)原始指令地址的目標(biāo)地址。
13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)處理設(shè)備,其中,查找電路被配置為,提供路徑信息 的備選信息,備選信息定義目標(biāo)地址中的相應(yīng)地址與索引值之間的多個(gè)彼此不同的可選關(guān) 系,組合電路被配置為對(duì)分別針對(duì)原始指令地址中彼此不同的原始指令地址而獲得的相應(yīng) 訪問(wèn)的再劃分信息進(jìn)行組合,并且使用組合后的相應(yīng)訪問(wèn)的再劃分信息來(lái)控制備選信息中 相應(yīng)不同備選信息的選擇,以確定針對(duì)原始指令地址中彼此不同的原始指令地址的目標(biāo)地 址。
14.一種用于執(zhí)行邏輯上連續(xù)位置處的指令的計(jì)算機(jī)程序的方法,所述方法包括-利用位置相關(guān)大小和/或方向的地址步長(zhǎng)來(lái)確定指令的目標(biāo)地址,所述地址步長(zhǎng)在 程序中邏輯上連續(xù)位置處的指令的目標(biāo)地址之間,所述地址步長(zhǎng)的至少一部分與指令大小 不相對(duì)應(yīng);-使用目標(biāo)地址來(lái)從存儲(chǔ)器中獲取指令;-執(zhí)行獲取的指令。
15.根據(jù)權(quán)利要求14所述的方法,其中,使用偽隨機(jī)選擇的地址步長(zhǎng)。
16.根據(jù)權(quán)利要求15所述的方法,其中,以相同頻率使用符號(hào)彼此相反的地址步長(zhǎng)。
17.根據(jù)權(quán)利要求14所述的方法,其中,來(lái)自于邏輯上連續(xù)原始指令地址的序列(32) 的指令是根據(jù)相應(yīng)目標(biāo)地址集合來(lái)獲取的,其中,連續(xù)地址步長(zhǎng)在從中獲取邏輯上連續(xù)原 始指令地址的目標(biāo)地址之間,相應(yīng)集合中的目標(biāo)地址處于多個(gè)非交疊地址范圍(33a-d)之 中,每個(gè)范圍(33a-d)的至少一半由來(lái)自序列(32)的指令填充,連續(xù)地址步長(zhǎng)包括第一地 址步長(zhǎng),至少在范圍(33a-d)中的第一范圍內(nèi);以及第二地址步長(zhǎng),在所述第一地址步長(zhǎng)之 間,并至少在范圍(33a-d)中的第二范圍內(nèi)。
18.根據(jù)權(quán)利要求17所述的方法,其中,將原始指令地址映射到目標(biāo)地址與將連續(xù)原 始指令地址映射到沿著η維陣列中的點(diǎn)的路徑(36)中的連續(xù)位置相對(duì)應(yīng),其中,η大于1,所述路徑在陣 列的所有維度上蜿蜒,并且將沿著所述陣列的相應(yīng)行、行組或行部分的位置 映射到范圍(33a_d)中的相應(yīng)范圍,路徑由陣列中相鄰位置之間的步長(zhǎng)組成,訪問(wèn)陣列的 每一行中的至少一半的點(diǎn)。
全文摘要
通過(guò)對(duì)程序的指令重排序來(lái)混淆該程序。利用邏輯上連續(xù)指令的地址之間的位置相關(guān)地址步長(zhǎng),以不規(guī)則的方式將原始指令地址映射到目標(biāo)地址。優(yōu)選地,使用偽隨機(jī)地址步長(zhǎng),例如,以相同頻率利用彼此符號(hào)相反的地址步長(zhǎng)。數(shù)據(jù)處理設(shè)備具有指令流控制單元,該指令流控制單元根據(jù)位置相關(guān)地址步長(zhǎng)來(lái)更新指令地址。指令流控制單元可以包括包含秘密信息的電路,不能正常地從外部訪問(wèn)該信息來(lái)控制更新。例如,查找表可以與地址步長(zhǎng)、連續(xù)地址或映射的地址值一同使用。在實(shí)施例中,可以通過(guò)沿著n維陣列中的點(diǎn)的路徑(36)來(lái)可視化原始指令地址到目標(biāo)地址的映射,其中n大于1。將連續(xù)原始指令地址映射到路徑中的連續(xù)位置,并且將沿著陣列的相應(yīng)行的位置映射到相應(yīng)的彼此不相交的范圍(33a-d)。由于使用n維路徑,保持了提供高速緩存效率的局部性,而路徑的多維特性使得能夠?qū)⑦@種局部性與偽隨機(jī)步長(zhǎng)相組合。
文檔編號(hào)G06F9/32GK101939724SQ200980104146
公開(kāi)日2011年1月5日 申請(qǐng)日期2009年2月2日 優(yōu)先權(quán)日2008年2月6日
發(fā)明者彼得·J·漢森斯, 梅爾·沃克萊爾 申請(qǐng)人:Nxp股份有限公司