亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于arm構(gòu)架的納秒級(jí)計(jì)時(shí)方法和系統(tǒng)的制作方法_3

文檔序號(hào):9646468閱讀:來源:國(guó)知局
要安裝交叉編 譯(在某個(gè)平臺(tái)上編譯出可在其他平臺(tái)上運(yùn)行的代碼)工具??筛鶕?jù)內(nèi)核版本信息,選擇 合適的交叉編譯工具,如本發(fā)明可以采用arm-linux-androideabi-4. 6,編譯的內(nèi)核版本為 3.0.8-gb55e9ac(Googlenexuss)〇
[0081] 優(yōu)選地,在執(zhí)行步驟S2時(shí),可以在目標(biāo)設(shè)備的Android系統(tǒng)中搭建NDK開發(fā)環(huán)境 (NativeDevelopmentKit,允許用戶使用類似C/C++的原生代碼語(yǔ)言執(zhí)行部分程序),然后 再C程序中嵌入?yún)R編代碼,利用JNI技術(shù)(JavaNativeInterface提供API以實(shí)現(xiàn)Java 和其他語(yǔ)言的通信)實(shí)現(xiàn)C程序的調(diào)用,進(jìn)而實(shí)現(xiàn)對(duì)CCNT寄存器的操作。如圖3所示,步 驟S2包括:
[0082] S21,目標(biāo)設(shè)備初始化ARM處理器中的CCNT寄存器;執(zhí)行Enableccnt_init(),允 許用戶模式下訪問性能監(jiān)視寄存器,調(diào)用〃MCRpl5, 0, % 0,c9,cl4, 0〃 : : 〃r〃(1)代碼。
[0083] S22,設(shè)置禁止CCNT寄存器因溢出而中斷;由于一般情況下,當(dāng)計(jì)數(shù)器溢 出時(shí),CCNT寄存器產(chǎn)生中斷(例如nPMUIRQ,在ARM1156上是nPMUFIQ)。本實(shí)施可 以通過對(duì)計(jì)數(shù)器的溢出標(biāo)志寫0,使得中斷可以被清除,通過調(diào)用〃MCRpl5,0, % 0,c9,cl4, 2〃: :〃r〃(0x8000000f)代碼實(shí)現(xiàn)。
[0084]S23,設(shè)置允許所有CCNT寄存器進(jìn)行計(jì)數(shù),通過調(diào)用〃MCRpl5, 0,% 0,c9,cl2,Γ: :〃r〃(0x8000000f)代碼實(shí)現(xiàn);在步驟S23之前還可以先激活整個(gè)性能監(jiān)控 機(jī)制(由于CCNT寄存器是用于進(jìn)行性能監(jiān)控的,也即相當(dāng)于激活CCNT寄存器),通過調(diào)用 "MCRpl5, 0, % 0,c9,cl2, 0": : "r" (7)代碼來實(shí)現(xiàn)。
[0085]S24,重置所有CCNT寄存器的初始值為0;通過調(diào)用〃MCRpl5, 0,% 0,c9,cl2, 3〃: :〃r〃(0x8000000f)代碼來實(shí)現(xiàn)。
[0086] S25,讀取CCNT寄存器的計(jì)數(shù)值,返回第一次時(shí)鐘周期數(shù)T1;調(diào)用"MRCpl5, 0, % 0,c9,cl3, 0〃: : 〃r〃 (?\)來實(shí)現(xiàn),1\為返回的時(shí)鐘周期數(shù)。
[0087] S26,執(zhí)行被測(cè)試代碼,讀取CCNT寄存器的計(jì)數(shù)值,返回第二次時(shí)鐘周期數(shù)Τ2;通 過調(diào)用〃MRCρ15, 0, % 0,c9,cl3, 0〃: :〃r〃(T2)來實(shí)現(xiàn)。
[0088]S27,計(jì)算第二次時(shí)鐘周期數(shù)和第一次時(shí)鐘周期數(shù)的第一次差值,計(jì)算第一差值與 CCNT寄存器計(jì)數(shù)函數(shù)的執(zhí)行周期數(shù)的第二差值;
[0089] S28,獲取ARM處理器的主頻,根據(jù)主頻將第二差值換算為時(shí)間,作為測(cè)試代碼的 執(zhí)行時(shí)間長(zhǎng)度。
[0090] 通過計(jì)算Hi獲取被測(cè)試代碼執(zhí)行消耗的時(shí)鐘周期數(shù),與處理器主頻換算為時(shí) 間單位。在使用CCNT寄存器計(jì)數(shù)時(shí),要考慮計(jì)時(shí)函數(shù)本身執(zhí)行也消耗時(shí)鐘周期,造成計(jì)時(shí) 小號(hào),因此需要將計(jì)時(shí)結(jié)果減去這一部分,假設(shè)計(jì)數(shù)函數(shù)的執(zhí)行周期數(shù)為TOTCTtead,F(xiàn)為ARM 處理器的主頻。則最終被測(cè)試代碼的計(jì)時(shí)結(jié)果為:
[0091] 時(shí)間=(TfTfT-J/Fo
[0092] 優(yōu)選地,在步驟S25之前還包括:
[0093] 控制CCNT寄存器以每個(gè)周期為單位進(jìn)行計(jì)數(shù)。
[0094] 由于CCNT寄存器可以是對(duì)每個(gè)周期或者每64個(gè)周期進(jìn)行計(jì)數(shù)、以上實(shí)施例 為了提高計(jì)時(shí)精度,以單個(gè)周期進(jìn)行計(jì)數(shù)。如果按每64個(gè)周期進(jìn)行計(jì)數(shù),則將步驟 323中的調(diào)用〃]\0??15,0,%0'9,(312,0〃 ::4〃(7)代碼,替換為調(diào)用〃]\0??15,0,% 0,c9,cl2,0〃::〃r〃(31)代碼。
[0095] 為了驗(yàn)證本發(fā)明的效果,結(jié)合ARM架構(gòu)下密碼算法Cache計(jì)時(shí)攻擊(被測(cè)試代碼) 對(duì)高精度計(jì)時(shí)技術(shù)的現(xiàn)實(shí)需求,針對(duì)其攻擊的基本原理,即利用Cache訪問命中與失效的 時(shí)間差異信息,以及該差異信息與秘鑰的相關(guān)性推算出秘鑰的結(jié)果,實(shí)現(xiàn)在ARM平臺(tái)下的 納秒級(jí)計(jì)時(shí)技術(shù)。
[0096] 1、首先進(jìn)行實(shí)驗(yàn)環(huán)境配置
[0097] 由于原生Android內(nèi)核源碼編譯一般都要針對(duì)目標(biāo)設(shè)備的特定處理器進(jìn)行準(zhǔn)備 工作,下載相應(yīng)版本的內(nèi)核源碼,因此在實(shí)驗(yàn)過程中,使用的Android移動(dòng)智能終端及PC端 編譯環(huán)境的各項(xiàng)參數(shù)如表1所示:
[0098]
[0099] 表lAndroid內(nèi)核編譯和CCNT驅(qū)動(dòng)模塊加載實(shí)驗(yàn)環(huán)境
[0100] 按照上述實(shí)施例中Android內(nèi)核源碼編譯步驟,搭建編譯環(huán)境,安裝交叉編譯工 具,執(zhí)行編譯,添加CCNT內(nèi)核驅(qū)動(dòng),創(chuàng)建enableccnt.c,核心源碼如下:
[0103] 2、然后獲取CCNT寄存器數(shù)值
[0104] 在完成搭建Eelipse平臺(tái)下針對(duì)Android應(yīng)用程序的NDK開發(fā)環(huán)境后,運(yùn)用JNI 技術(shù)調(diào)用C程序,實(shí)現(xiàn)java調(diào)用C函數(shù)以及C函數(shù)通過內(nèi)嵌式匯編指令訪問CCNT計(jì)數(shù)器, 獲取返回的時(shí)鐘周期計(jì)數(shù)結(jié)果。具體如下:
[0105]
[0106] 返回的value值即為時(shí)鐘周期計(jì)數(shù)器數(shù)值。
[0107] 3、驗(yàn)證計(jì)時(shí)結(jié)果精確
[0108] 為了驗(yàn)證精確計(jì)時(shí)結(jié)果,首先對(duì)計(jì)時(shí)指令的耗時(shí)進(jìn)行測(cè)試。在實(shí)驗(yàn)過程中,發(fā)現(xiàn)為 了保證計(jì)時(shí)穩(wěn)定性,可先執(zhí)行一定次數(shù)的計(jì)時(shí)指令,讓計(jì)時(shí)器預(yù)熱;然后在重復(fù)執(zhí)行一定數(shù) 目的計(jì)時(shí)操作,如1〇〇〇次,統(tǒng)計(jì)后求平均。實(shí)驗(yàn)結(jié)果表明,計(jì)時(shí)器指令本身消耗時(shí)鐘周期數(shù) 大約為4個(gè),換算為4納秒左右。
[0109] 為了驗(yàn)證細(xì)微的時(shí)間差異,對(duì)代碼級(jí)的執(zhí)行時(shí)間進(jìn)行測(cè)量,構(gòu)造一個(gè)整型數(shù)組: inta[64],大小為256個(gè)字節(jié),對(duì)齊Cache行的話,剛好填充4個(gè)Cache行。然后設(shè)置num 的值,分別測(cè)量:
[0110]For(intk=0;k<num;k=k+16)
[0111] {
[0112] a[k] =a[k]*3 ;
[0113] }
[0114] 對(duì)應(yīng)的疊加執(zhí)行時(shí)間。測(cè)量結(jié)果如表2所示:
[0115]
[0116] 表2數(shù)組訪問執(zhí)行時(shí)間
[0117] 訪問一個(gè)int數(shù)組元素,命中的時(shí)鐘周期為11~15,失效的時(shí)鐘周期為20~25, 能夠通過本發(fā)明的精確計(jì)時(shí)方法進(jìn)行有效區(qū)分。
[0118] 依據(jù)Googlenexuss處理的LICache結(jié)構(gòu)(32KB,4路組相連,每個(gè)Cache行大小 為64字節(jié),共128個(gè)Cache組),通過構(gòu)造與Cache大小相同的數(shù)組,訪問數(shù)組元素,并測(cè)量 訪問每個(gè)Cache組的訪問時(shí)間,計(jì)時(shí)結(jié)果如圖5所示,實(shí)現(xiàn)了有效的區(qū)分??梢?,根據(jù)本實(shí) 施例的方法可以實(shí)現(xiàn)高精度的計(jì)時(shí)。
[0119] 本發(fā)明還提出了一種基于ARM構(gòu)架的納秒級(jí)計(jì)時(shí)系統(tǒng)10,包括處理器11和目標(biāo)設(shè) 備12,
[0120] 處理器11用于根據(jù)目標(biāo)設(shè)備12的操作系統(tǒng)內(nèi)核版本,對(duì)該內(nèi)核版本對(duì)應(yīng)的操作 系統(tǒng)內(nèi)核源碼進(jìn)行編譯,加載CCNT內(nèi)核模塊,以生成CCNT驅(qū)動(dòng)模塊,將CCNT驅(qū)動(dòng)模塊加載 到目標(biāo)設(shè)備12中;
[0121] 目標(biāo)設(shè)備12用于初始化ARM處理器中的CCNT寄存器,讀取CCNT寄存器的第一次 時(shí)鐘周期數(shù),執(zhí)行被測(cè)試代碼,讀取CCNT寄存器的第二次時(shí)鐘周期數(shù),根據(jù)第二次時(shí)鐘周 期數(shù)和第一次時(shí)鐘周期數(shù)的差值計(jì)算被測(cè)試代碼的執(zhí)行時(shí)間長(zhǎng)度。
[0122] 優(yōu)選地,處理器11包括:
[0123] 下載單元110,用于確定目標(biāo)設(shè)備的內(nèi)核版本,下載內(nèi)核版本對(duì)應(yīng)的操作系統(tǒng)內(nèi)核 源碼;
[0124] 獲取單元111,用于獲取目標(biāo)設(shè)備的內(nèi)核配置信息;
[0125] 編譯單元112,用于根據(jù)配置信息,對(duì)內(nèi)核源碼進(jìn)行編譯,編譯成功后在內(nèi)核源碼 中添加CCNT內(nèi)核驅(qū)動(dòng)模塊,以及對(duì)添加CCNT內(nèi)核驅(qū)動(dòng)模塊后的內(nèi)核源碼再
當(dāng)前第3頁(yè)1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1