汇编耻辱殿堂

查看原文 HN 讨论

文章摘要

Assembly Hall of Shame(汇编耻辱殿堂)是安全研究者 Christopher Domas(网名 xoreaxeaxeax,sandsifter、cantor.dust、movfuscator 的作者)的一个研究项目,它把常规做法整个反了过来。

README 开门见山:指令延迟分析通常关注性能优化——让代码跑得越快越好。这个项目走相反方向:寻找单条指令性能的绝对下限。也就是说,这是一份排行榜,比的是谁能让一条指令跑得最慢。

规则设计得相当讲究,这也是这个项目不流于恶搞的原因:

当前 x86 冠军的成绩是 198,002,498,236 个周期,也就是 62 秒——一条指令。

夺冠策略非常精妙:用 fxrstor64 从 PCIe fabric 中一块高延迟 MMIO 区域加载 512 字节的 FPU/MMX/XMM 状态,同时在这条加载在途时把整个 fabric 饿死——一队「锤子核心」用紧凑的 4 字节读循环猛砸另一个高延迟 MMIO 寄存器,用非投递(non-posted)事务把 PCIe 根复合体和端点都灌满,于是 CPU 0 那条 512 字节的 fxrstor64 就必须排在所有这些争用流量后面。参赛硬件是 AMD Ryzen 7 5800H。

整个排行榜读下来就是一部微架构病理学教材,从倒数第一路爬到冠军,每一级都对应一种不同的慢速机制:

这项研究不是纯粹的玩票。 README 的「荣誉提名」直接点明了实用价值:那条违反规范的非对齐 ymm0 加载(从停滞的 GPU 寄存器强制发出非投递 dword 事务)被用来攻破系统管理模式(SMM)的基础设计,成果发布在作者的另一个项目 smiiiiiiiiiiiiiiii 里。换句话说,一条能跑几百毫秒到几秒的指令,是打破 SMI 时序假设的武器

ARM 和 RISC-V 排行榜目前都是 T.B.D.。

HN 评论精华

这条帖子拿到 434 分。讨论的真实走向相当分散:一部分人在硬核补充微架构知识,一部分人顺着「计算机为什么还是这么慢」跑题跑得很远,还有一大段是关于 nop 到底做不做事的极限抬杠。

对作者其人的补充(本帖信息密度最高的部分)

技术性质疑与补充

关于 nop 的一场极限抬杠

跑题最远的一条支线:计算机为什么还是慢

最后一条八卦

</content>