chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

你對CPU這些隱藏指令怎么看?

Linux愛好者 ? 來源:Linux愛好者 ? 作者:Linux愛好者 ? 2022-05-16 15:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們知道,我們平時編程寫的高級語言,是經(jīng)過編譯器編譯以后,變成了CPU可以執(zhí)行的機(jī)器指令:5a0e623c-d4cc-11ec-bce3-dac502259ad0.png而CPU能支持的指令,都在它的指令集里面了。很久以來,我都在思考一個問題:CPU有沒有未公開的指令?或者說:CPU有沒有隱藏的指令?為什么會有這個問題?平常我們談?wù)摼W(wǎng)絡(luò)安全問題的時候,大多數(shù)時候都是在軟件層面。談應(yīng)用程序的漏洞、后端服務(wù)的漏洞、第三方開源組件的漏洞乃至操作系統(tǒng)的漏洞。但很少有機(jī)會去觸及硬件,前幾年爆發(fā)的熔斷幽靈系列漏洞,就告訴我們,CPU也不是可信任的。要是CPU隱藏有某些不為人知的指令,這是一件非??膳碌氖虑?。如果某一天,某些國家或者某些團(tuán)體組織出于某種需要,利用這些隱藏的指令來發(fā)動攻擊,后果不堪設(shè)想。雖然想到過這個問題,但我一直沒有付諸實(shí)踐去認(rèn)真的研究。直到前段時間,有一位老師分享了一份PDF給我,解答了我的疑惑。這份PDF內(nèi)容是2017年頂級黑客大會Black Hat上的一篇報告:《us-17-Domas-Breaking-The-x86-ISA》,作者是大神:@xoreaxeaxeax,熟悉匯編的同學(xué)知道這名字是什么意思嗎?5a9e36be-d4cc-11ec-bce3-dac502259ad0.png這份PDF深度研究了x86架構(gòu)CPU中隱藏的指令,原報告因?yàn)槭怯⑽模雌饋碛行┗逎?,這篇文章,我嘗試用大家易懂的語言來給大家分享一下這篇非常有意思的干貨。有些人會問:真的會有隱藏指令的存在嗎,CPU的指令集不是都寫在指令手冊里了嗎?我們以單字節(jié)指令為例,單字節(jié)的范圍是0x00-0XFF,總共256種組合,Intel的指令手冊中是這樣介紹單字節(jié)指令的:5ad4e8ee-d4cc-11ec-bce3-dac502259ad0.png橫向?yàn)閱巫止?jié)的高四位,縱向?yàn)閱巫止?jié)的低四位,順著表格定位,可以找到每一個單字節(jié)指令的定義。比如我們常見的nop指令的機(jī)器碼是0x90,就是行為9,列為0的那一格。但是不知道你發(fā)現(xiàn)沒有,這張表格中還有些單元格是空的,比如0xF1,那CPU拿到一個為0xF1的指令,會怎么執(zhí)行呢?指令手冊沒告訴你。這篇報告的主要內(nèi)容就是告訴你,如何去尋找這些隱藏的指令。

指令集的搜索空間

想要找到隱藏的指令,得先明確一個問題:一條指令到底有多長,換句話說,有幾個字節(jié),我們應(yīng)該在什么樣的一個范圍內(nèi)去尋找隱藏指令。如果指令長度是固定的,比如JVM那樣的虛擬機(jī),那問題好辦,直接遍歷就行了。但問題難就難在,x86架構(gòu)CPU的指令集屬于復(fù)雜指令集CISC,它的指令不是固定長度的。有單字節(jié)指令,比如:
90 nopCC int 3C3 ret
也有雙字節(jié)指令,比如:
8B C8 mov ecx,eax6A 20 push 20h
還有三四節(jié)、四字節(jié)、五字節(jié)···最長能有十幾個字節(jié),比如這條指令:
指令:lock add qword cs:[eax + 4 * eax + 07e06df23h], 0efcdab89h機(jī)器碼:2e 67 f0 48 818480 23df067e 89abcdef
一個字節(jié)、兩個字節(jié),甚至三個四個遍歷都還能接受,4個字節(jié)最多也就42億多種組合,對于計算機(jī)來說,也還能接受。但越往后,容量是呈指數(shù)型增長,這種情況再去遍歷,顯然是不現(xiàn)實(shí)的。

指令搜索算法

這份報告中提出了一種深度優(yōu)先的搜索算法:5b0d9d60-d4cc-11ec-bce3-dac502259ad0.png該算法的指導(dǎo)思想在于:快速跳過指令中無關(guān)緊要的字節(jié)。5b20ce3a-d4cc-11ec-bce3-dac502259ad0.png怎么理解這句話?比如壓棧的指令push,下面幾條雖然字節(jié)序列不同,但變化的只是數(shù)據(jù),其實(shí)都是壓棧指令,對于這類指令,就沒必要花費(fèi)時間去遍歷:
  • 68 6F 72 6C 64 push 646C726Fh
  • 68 6F 2C 20 77 push 77202C6Fh
  • 68 68 65 6C 6C push 6C6C6568h
第一個字節(jié)68就是關(guān)鍵字節(jié),后面的四個字節(jié)都是壓入棧中的數(shù)據(jù),就屬于無關(guān)緊要的字節(jié)。如果能識別出這類,快速跳過,將能夠大面積減少需要遍歷的搜索空間。上面只是一個例子,如何能夠系統(tǒng)化的過濾掉這類指令呢?報告中提出了一個方案:5b4bd922-d4cc-11ec-bce3-dac502259ad0.png觀察指令中的有意義的字節(jié),它們對指令的長度和異常表現(xiàn)會產(chǎn)生沖擊。又該怎么理解這句話?還是上面那個例子,當(dāng)嘗試修改第一個字節(jié)68的時候,這一段二進(jìn)制序列可能就完全變成了別的指令,甚至指令長度都會發(fā)生變化(比如把68改成90,那就變成了一個字節(jié)的nop指令),那么就認(rèn)為這第一個字節(jié)是一個有意義的字節(jié),修改了它會對指令的長度產(chǎn)生重要影響。反之,如果修改后面字節(jié)的數(shù)據(jù),會發(fā)現(xiàn)這仍然是一條5個字節(jié)的壓棧指令,長度沒變化,也沒有其他異常行為表現(xiàn)與之前不同,那么就認(rèn)為后面幾個字節(jié)是無關(guān)緊要的字節(jié)。在這個指導(dǎo)思想下,我們來看一個例子:從下面這一段數(shù)據(jù)開始出發(fā):5b77483c-d4cc-11ec-bce3-dac502259ad0.png我們從兩個字節(jié)的指令開始遍歷:5b877360-d4cc-11ec-bce3-dac502259ad0.png把最后那個字節(jié)的內(nèi)容+1,嘗試去執(zhí)行它:5b970866-d4cc-11ec-bce3-dac502259ad0.png發(fā)現(xiàn)指令長度沒有變化,那就繼續(xù)+1,再次嘗試執(zhí)行它:5ba819c6-d4cc-11ec-bce3-dac502259ad0.png一直這樣加下去,直到發(fā)現(xiàn)加到4的時候,指令長度發(fā)生了變化,長度超過了2(但具體是多少還不知道,后文會解釋):5bcbc2d6-d4cc-11ec-bce3-dac502259ad0.png那么在這個基礎(chǔ)上,長度增加1位,以指令長度為3的指令來繼續(xù)上面的探索過程:從最后一位開始+1做起。5bdd47ea-d4cc-11ec-bce3-dac502259ad0.png隨著分析的深入,梳理一下指令搜索的路徑圖:5c09b56e-d4cc-11ec-bce3-dac502259ad0.png當(dāng)某一條的最后一個字節(jié)遍歷至FF時,開始往回走(就像遞歸,不能一直往下,總有回去的時候):5c3b728e-d4cc-11ec-bce3-dac502259ad0.png往回走一個字節(jié),將其+1,繼續(xù)再來:5c513330-d4cc-11ec-bce3-dac502259ad0.png按照這個思路,整個要搜索的指令空間壓縮到可以接受遍歷的程度:5c81a9c0-d4cc-11ec-bce3-dac502259ad0.png

如何判定指令長度

現(xiàn)在來解答前面遺留的一個問題。上面這個算法能夠工作的一個重要前提是:我們得知道,給末尾字節(jié)+1后,有沒有影響指令的長度。要判斷某個字節(jié)是不是關(guān)鍵字節(jié),就得知道這個字節(jié)的內(nèi)容變化,會不會影響到指令長度,所以如果無法判斷長度有沒有變化,那上面的算法就無從談起了。所以如何知道長度有沒有變化呢?報告中用到了一個非常巧妙的方法。假設(shè)我們要評估下面這一串?dāng)?shù)據(jù),前面開頭到底多少個字節(jié)是一條完整指令。5cb11408-d4cc-11ec-bce3-dac502259ad0.png可能第一個字節(jié)0F就是一條指令。也可能前面兩個字節(jié)0F 6A是一條指令。還可能前面五個字節(jié)0F 6A 60 6A 79 6D是一條指令。到底是什么情況,我們不知道,讓我們用程序來嘗試推導(dǎo)出來。準(zhǔn)備兩個連續(xù)的內(nèi)存頁面,前面一個擁有可執(zhí)行的權(quán)限,后面一個不能執(zhí)行。5ccfdbd6-d4cc-11ec-bce3-dac502259ad0.png記?。寒?dāng)CPU發(fā)現(xiàn)指令位于不可執(zhí)行的頁面中時,它會拋異常!現(xiàn)在,在內(nèi)存中這樣放置上面的數(shù)據(jù)流:第一個字節(jié)放在第一個頁面的末尾位置,后面在字節(jié)放在第二個不可執(zhí)行的頁面上。5cf21f02-d4cc-11ec-bce3-dac502259ad0.png然后JMP到這條指令的地址,嘗試去執(zhí)行它,CPU中的譯碼器開始譯碼:5d0f38c6-d4cc-11ec-bce3-dac502259ad0.png譯碼器譯碼發(fā)現(xiàn)是0F,不是單字節(jié)指令,還需要繼續(xù)分析后面的字節(jié),繼續(xù)取第二個字節(jié):5d606ae8-d4cc-11ec-bce3-dac502259ad0.png但注意,第二個字節(jié)是位于不可執(zhí)行的頁面,CPU檢查發(fā)現(xiàn)后會拋出頁錯誤異常:5d6f3ab4-d4cc-11ec-bce3-dac502259ad0.png如果我們發(fā)現(xiàn)CPU拋了異常,并且異常的地址指向了第二個頁面的地址,那么我們可以斷定:這條指令的長度肯定不止一個字節(jié)。5d964280-d4cc-11ec-bce3-dac502259ad0.png既然不止一個字節(jié),那就往前挪一下,放兩個字節(jié)在可執(zhí)行頁面,從第三個字節(jié)開始放在不可執(zhí)行頁面,繼續(xù)這個過程。5dc835ce-d4cc-11ec-bce3-dac502259ad0.png繼續(xù)上面這個過程,放三個字節(jié)在可執(zhí)行頁面:5dd8f238-d4cc-11ec-bce3-dac502259ad0.png四個:5e02d0ee-d4cc-11ec-bce3-dac502259ad0.png當(dāng)放了四個字節(jié)在可執(zhí)行頁面之后,事情發(fā)生了變化:指令可以執(zhí)行了!雖然也拋了異常(因?yàn)樘熘肋@是個什么指令,會拋什么異常),但頁錯誤的地址不再是第二個頁面的地址了!5e181e90-d4cc-11ec-bce3-dac502259ad0.png有了這個信號,我們就知道,前面4個字節(jié)是一條完整的指令:5e26b680-d4cc-11ec-bce3-dac502259ad0.png

挖掘隱藏指令

現(xiàn)在核心算法和判斷指令長度的方法都介紹完了,可以正式來開挖,挖出那些隱藏的指令了!以一臺Intel Core i7的CPU為目標(biāo),來挖一挖:5e52da3a-d4cc-11ec-bce3-dac502259ad0.png挖掘成果,收獲頗豐:5e81527a-d4cc-11ec-bce3-dac502259ad0.png5eabeee0-d4cc-11ec-bce3-dac502259ad0.png這些都是Intel指令集手冊中未交待,但CPU卻能執(zhí)行的指令。然后是AMD Athon的CPU:5ed36ee8-d4cc-11ec-bce3-dac502259ad0.png挖掘成果:5ee6eec8-d4cc-11ec-bce3-dac502259ad0.png那這些隱藏的指令是做什么的呢?有些已經(jīng)被逆向工程分析了。還有的就是毫無記錄,只有Intel/AMD自己人知道了,誰知道它們用這些指令是來干嘛的?軟件即便是開源都能爆出各種各樣的問題,何況是黑盒一樣的硬件。CPU作為計算機(jī)中的基石,它要是出了問題,那可是大問題。我不是陰謀論,害人之心不可有,但防人之心不可無。看完這些,我對國產(chǎn)、安全、自主可控這幾個字的理解又加深了一層。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11214

    瀏覽量

    222802
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1669

    瀏覽量

    51066

原文標(biāo)題:可怕!CPU 暗藏了這些未公開的指令!

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    工信部出手!整頓隱藏式門把手、智能駕駛等,這些車企已連夜整改

    電子發(fā)燒友網(wǎng)報道(文/黃山明)近幾年新能源汽車呈現(xiàn)爆發(fā)式增長,其中各種新奇的功能以及酷炫的外表是吸引用戶購買的重要因素。例如隱藏式門把手便成為不少新能源汽車的標(biāo)配,尤其是隱藏式門把手可以讓外形看起來
    的頭像 發(fā)表于 05-13 01:07 ?7930次閱讀

    風(fēng)華陶瓷電容型號怎么看?

    及參數(shù)含義 1、封裝尺寸 : 常見封裝尺寸包括0201、0402、0603、0805、1206等,這些尺寸用于表示電容的物理大小。例如,0805表示長度是0.08英寸、寬度是0.05英寸。 2、介質(zhì)種類 : 介質(zhì)種類反映了電容的工作環(huán)境和工作溫度要求。 常見介質(zhì)
    的頭像 發(fā)表于 11-07 17:38 ?508次閱讀
    風(fēng)華陶瓷電容型號<b class='flag-5'>怎么看</b>?

    CPU里真的有黃金:看完秒懂

    在大家的印象中,黃金是珠寶、投資品和工業(yè)原料,但很少有人知道,我們每天使用的電腦CPU里竟然也隱藏著這種貴金屬。那為什么芯片會用到黃金,一顆CPU中能有多少純金呢?不依靠專業(yè)設(shè)備能提取出來嗎?
    的頭像 發(fā)表于 08-30 15:41 ?1705次閱讀

    浮思特 | 不僅能測溫!紅外熱成像還有這些隱藏技能

    說起紅外熱成像儀,第一時間想到的可能是消防員在濃煙中尋找被困人員,或者醫(yī)生在體檢時用它來測體溫。但實(shí)際上,紅外熱成像的用途,遠(yuǎn)比你想象的要廣!01紅外熱成像原理很簡單紅外熱成像儀的核心原理,是將
    的頭像 發(fā)表于 08-15 09:45 ?855次閱讀
    浮思特 | 不僅能測溫!紅外熱成像還有<b class='flag-5'>這些</b><b class='flag-5'>隱藏</b>技能

    探索CPU架構(gòu)的奧秘,揭秘高性能計算的隱形引擎

    的深海,揭開那些隱藏在高性能計算背后的神秘面紗。1.取指令(Fetch)程序計數(shù)器(PC):CPU通過程序計數(shù)器獲取下一條指令的內(nèi)存地址。指令
    的頭像 發(fā)表于 08-13 11:58 ?511次閱讀
    探索<b class='flag-5'>CPU</b>架構(gòu)的奧秘,揭秘高性能計算的隱形引擎

    步進(jìn)電機(jī)控制指令詳解

    這些指令主要是針對用 PLC 直接聯(lián)動伺服放大器,目的是可以不借助其他擴(kuò)展設(shè)備(例如1GM 模塊)來進(jìn)行簡單的點(diǎn)位控制, 使用這些指令時最好配合三菱的伺服放大器 (如 MR-J2)。然
    的頭像 發(fā)表于 06-12 10:33 ?1566次閱讀
    步進(jìn)電機(jī)控制<b class='flag-5'>指令</b>詳解

    CPU的各種指令和執(zhí)行流程

    在集成電路設(shè)計中,CPU指令是指計算機(jī)中央處理單元(CPU)用來執(zhí)行計算任務(wù)的基本操作指令集。這些指令
    的頭像 發(fā)表于 04-18 11:24 ?1888次閱讀

    怎么看網(wǎng)線是幾類的

    識別網(wǎng)線類別可通過以下方法,結(jié)合標(biāo)識、結(jié)構(gòu)、性能綜合判斷: 一、查看外皮標(biāo)識(最直接) 標(biāo)識規(guī)則: 網(wǎng)線外皮通常印有 CAT+數(shù)字(如 CAT5、CAT6),數(shù)字代表類別,E 表示增強(qiáng)型(如 CAT5e 為超五類)。 五類網(wǎng)線:CAT5,基礎(chǔ)款,已逐漸被淘汰。 超五類網(wǎng)線:CAT5e,支持千兆網(wǎng)絡(luò),性價比高。 六類網(wǎng)線:CAT6,支持千兆/短距離萬兆,抗干擾強(qiáng)。 超六類網(wǎng)線:CAT6A,支持萬兆,屏蔽層增強(qiáng)。 七類網(wǎng)線:CAT7,屏蔽層+萬兆,抗干擾極強(qiáng)。 二、觀察物理結(jié)構(gòu)(輔助判
    的頭像 發(fā)表于 04-08 10:43 ?1.4w次閱讀

    采購GUTOR UPS備品備件,隱藏的“雷區(qū)” 了解嗎?

    在GUTOR UPS備品備件采購之路上,困難重重,選型、渠道甄別、成本把控、安裝部署、售后保障,樁樁件件都是棘手難題。隱藏的“雷區(qū)” 了解嗎?
    發(fā)表于 03-21 16:08

    STM32H745BIT6單片機(jī)怎么看哪個引腳配置哪個內(nèi)核???

    STM32H745BIT6單片機(jī)怎么看哪個引腳配置哪個內(nèi)核啊,在數(shù)據(jù)手冊里沒看到
    發(fā)表于 03-13 06:08

    STM32從哪里可以看出芯片是否支持外部存儲擴(kuò)展?

    STM32從哪里可以看出芯片是否支持外部存儲擴(kuò)展,從什么可以選出合適的芯片,主要是速度這些,大概率是怎么看的,時鐘樹是怎么理解的
    發(fā)表于 03-10 06:16

    辦公多屏黨必備:HDMI分屏/擴(kuò)展塢的隱藏技巧

    對于辦公多屏黨來說,HDMI分屏器和擴(kuò)展塢是提升效率的利器。但除了基本的擴(kuò)展屏幕功能,這些設(shè)備還隱藏著許多實(shí)用技巧,能夠讓的多屏辦公體驗(yàn)更上一層樓。
    的頭像 發(fā)表于 02-17 17:10 ?1123次閱讀

    芯片行業(yè),怎么看?

    剛過去的2024年,半導(dǎo)體行業(yè)喜憂參半。但恭喜大家,我們都順利跨入了2025年?;氐饺ツ甑陌雽?dǎo)體行業(yè),喜的是,在AI的推動下,類似英偉達(dá)、博通、Marvell等大廠能夠憑借在數(shù)據(jù)中心相關(guān)芯片上的優(yōu)勢,獲得了很多的機(jī)會。但除了AI以外,似乎所有市場都不盡如人意。無論是之前高歌猛進(jìn)的汽車產(chǎn)業(yè),還是早已陷入了低潮的消費(fèi)電子。這就讓芯片市場在2024年,愁容滿面。展
    的頭像 發(fā)表于 01-03 10:03 ?1138次閱讀
    芯片行業(yè),<b class='flag-5'>怎么看</b>?

    TMS320F/C24x DSP控制器CPU指令集參考指南

    電子發(fā)燒友網(wǎng)站提供《TMS320F/C24x DSP控制器CPU指令集參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-30 16:47 ?2次下載
    TMS320F/C24x DSP控制器<b class='flag-5'>CPU</b>和<b class='flag-5'>指令</b>集參考指南

    TMS320C62x DSP CPU指令集參考指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C62x DSP CPU指令集參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-17 16:24 ?0次下載
    TMS320C62x DSP <b class='flag-5'>CPU</b>和<b class='flag-5'>指令</b>集參考指南