PC_Shopping 板


LINE

※ 引述《s25g5d4 (function(){})()》之铭言: : 1 ; rcx = kernel address : 2 ; rbx = probe array : 3 retry: : 4 mov al, byte [rcx] : 5 shl rax, 0xc : 6 jz retry : 7 mov rbx, qword [rbx + rax] 前文恕删。 没想到电虾版乡民这麽有志於学,我来更正并补充一些观念好了 首先,来解释几个名词: 1. speculative execution 例: if (a<b) c = b+1 else c = b+2 现代处理器都有分支预测器(branch predictor)去预测接下来程式会往哪走 然後就往那个方向执行下去,以范例来说,如果处理器觉得if会成立 那他不用等到(a<b)算出来,就可以先执行 c = b+1的部分 2. out-of-order exection 例: b = a * 2 c = b + 5 d = a + 10 这个例子中,第1行和第3行并没有资料相关性(data dependency) 所以1,3行可以一起执行,第2行则需等到第1行 a*2 算出来才可执行 执行顺序为(1, 3),然後(2) 3. in order retirement 虽然执行次序可以乱,但是retire指令仍要依序来 以第一个例子来说,如果if指令还没有retire,那麽暂存器c就不会真正被写入 回到paper例子,这个例子主要是利用speculative execution 第4行前面其实是有一个很难算出来的branch,比方说indirect jmp 根据某个记忆体内容,来决定要跳到哪,这个记忆体内容可能不在cache里 所以要从dram那边读出来要很久,这个时候分支预测器就跳出来说话了 说接下来可能会从第4行开始执行,所以4,5,6,7行就这麽执行下去了 (注:4,5,7有资料相关性,因此会依序执行) 他们可以执行到前面的branch算出来,发现预测错误为止 第4行是把kernel的资料搬一个byte存到暂存器rax里 由於intel在执行指令的时候没有检查权限,而是等到要retire了才检查 从结果上来看,虽然rax最终都没有被真正写入,但是第4行终究被执行了 kernel的资料被搬到了rax的rename register(T1) 然後T1向左移了12个bit(第5行) 最後第7行,从[rbx+T1]这个user位址中读了一个cache line出来 执行到此,第4行前面的那条指令终於算出来了,发现错了 把rax, rbx的资料都还原回去,就当作没有读过kernel的资料 也有可能他预测对了,终於可以retire,retire完之後 接下来要retire第4行的指令,结果发现他根本没有权限读取资料 一样也把rax, rbx的资料还原回去,当作没有读过kernel的资料 可是不管怎样,第7行的那个cache line还是被搬到了cache里 而且这个cache line还是user可以合法存取的 所以接下来骇客只需要合法的存取256(2^8)个cache line 看哪一个比较快,就知道kernel资料的那8个bit是什麽了 例如第4个cache line读起来比较快,那8个bit就是00000100 这里补充一点,现在学界普遍认为资料预取(data prefetch)不会越过page boundary 由於第5行shift 12个bit的关系,这256个cache line分别位於不同的page 所以存取第一个cache line并不会造成後面的cache line也被cpu预先搬到cache来 由於他们都位於不同page的关系,需要不同的位址转换(tlb entry) 只有之前读过的cache line那个page有做过位址转换,因此tlb hit 其他的通通都tlb miss,要花很长时间做table walk 转换完位址之後,cache miss又要去记忆体搬资料 因此跟之前第7行读过的cache line比起来,读取的执行时间差异又更大了 大概就这样 至於白话文解释和解法,去看我之前的回文吧#1QJRc-vL --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 136.62.164.18
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PC_Shopping/M.1515139158.A.DC1.html
1F:推 ericinttu : 有白话给个推 01/05 16:04
2F:推 jclin : 简单说就是micro-architecute跟uOPs没有检查权限 01/05 16:04
3F:→ jclin : 所以读进[rcx],做了乘法,又prefetch[rbx+rax] 01/05 16:06
4F:→ jclin : 因为要尽量塞满CPU执行单元,记忆体会尽量满足要求 01/05 16:06
5F:→ jclin : 让资料一ready就可以让这些uOPs去计算 01/05 16:07
6F:→ jclin : 没检查权限又塞进cache,最後就能被side-channel 01/05 16:08
7F:推 DANTEINFERNO: 所以说 怎麽会设计成不先确认权限再开始算R 484偷吃 01/05 16:09
8F:→ DANTEINFERNO: 步过头了? 01/05 16:09
9F:→ jclin : 基本上rax,rbx资料不用还原,因为是在uOPs内做 01/05 16:09
10F:→ jclin : 只是到最後发现白做,就 flush 不用存回 rax/rbx 01/05 16:09
11F:推 a58524andy : 推热心 01/05 16:10
12F:→ twlin : 还原就白话说法嘛,实际上当然是flush掉相关的 01/05 16:11
13F:→ twlin : physical register(rename register) 01/05 16:11
14F:推 s25g5d4 : 所以 porbe array 要对齐 page 的原因是这样,我还 01/05 16:12
15F:→ s25g5d4 : 以为是要读整个 page 进 cache 01/05 16:12
16F:→ s25g5d4 : 当初看的时候也搞不清楚为什麽 cache line 查到的大 01/05 16:12
17F:→ s25g5d4 : 小都是 64 bytes, 却要做 shift 12 01/05 16:13
18F:→ twlin : 是要让256个可能的cache line分别在不同的page 01/05 16:15
19F:推 ATand : 看完这篇再跟白话解释对照就大致明白了 01/05 16:20
20F:推 ununnihao : 所以这根本有可能是为了效能故意这样设计的? 01/05 16:29
21F:推 likeyousmile: 推专业文。PTT清流 01/05 16:31
22F:推 KotoriCute : Meltdown 的部分应该是吧 01/05 16:31
23F:→ twlin : 理论上来说,在tlb做位址转换时就可以顺便检查权限 01/05 16:35
24F:→ twlin : 可能他们检查权限太慢,无法meet timing,所以等到 01/05 16:35
25F:→ twlin : 之後retire再慢慢做,也可能是贪图方便,在retire时 01/05 16:36
26F:→ twlin : 由ROB一并处理各种exception 01/05 16:36
27F:推 jclin : meltdown是这样,spectre是更generalized.只靠分支预 01/05 16:39
28F:→ jclin : 测,不需要记忆体保护机制,但更难实作与成功,却也更 01/05 16:39
29F:→ jclin : 难防 01/05 16:39
30F:推 jclin : 叫 xxlin 都有这麽神吗 01/05 16:44
31F:推 Windcws9Z : twlin版友 印像是AMD的@@ 01/05 16:49
32F:推 Shauter : 又是AMD狂战士 01/05 16:50
33F:→ Windcws9Z : 不知道有没有记错 01/05 16:50
34F:→ kobe8112 : jc大是拐着弯称赞自己吗XDD 01/05 16:51
35F:推 kipi91718 : 话说要怎麽写判断是不是cache hit的存取时间阿? 01/05 16:52
36F:推 jclin : 原来早在 oversea_job 拜读过 twlin 大大推文,一时 01/05 17:10
37F:→ jclin : 不察 01/05 17:10
38F:→ jclin : cache hit/miss这很早就做出啦. x86有很精准的rdtsc 01/05 17:13
39F:→ jclin : 可以算cycle 01/05 17:13
40F:→ StarHero : 的确是酒杯那个比喻比较恰当 01/05 17:56
41F:推 TaiwanFight : 看下来感觉intel没啥问题 问题终究在那些骇客吧 01/05 21:37
42F:→ TaiwanFight : 把骇客抓一抓就好啦 01/05 21:37
43F:推 ken720331 : 楼上这个建议不错..可以提供给intel 01/05 21:49
44F:推 hizerg : 推 这篇说得很白话 01/05 21:52
45F:推 NCTUFAIWEN : 推 看到这篇终於懂惹 感谢你 01/06 01:01
46F:推 ry3298 : 推 01/06 13:50
47F:推 hms5232 : 看了一些文章後去搜寻一大堆文章好不容易看懂分支和 01/06 19:51
48F:→ hms5232 : 预测器了 才看到这篇一看就懂QQ 01/06 19:51







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP