算法与计算机科学github.com
x86 mov 指令是图灵完备的:仅用 mov 的编译器
X86 mov is turing complete: mov-only compiler
2015 — 2021,它一次次回到首页
黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。
导读
Movfuscator 是一个实验性 C 编译器,能把程序编译成只使用 x86 的 mov 指令的代码,证明了 mov 指令是图灵完备的。作者在页面附带了论文和视频讲解其实现原理。
为什么经久不衰:它以极端方式展示了 x86 指令集的冗余与灵活性,兼具趣味性和安全研究价值,多年来反复引发讨论。
HN 评论精选
指出 x86 的 mov 实际是一族指令,类似技术也是 ROP 攻击的基础
这是个有趣的程序。类似技术被用于构造 ROP(返回导向编程)攻击——你获得足够的构建块就能实现通用编程,剩下的只是映射问题。不过 x86 的 mov 有点作弊:它是一个助记符背后几十条完全不同的指令。ARM 的 mov 只做寄存器间操作,访存用 ldr/str,而 x86 全用 mov。
pslam查看英文原文
That's a fun program. Similar techniques to this are used to create "ROP" (return-oriented programming) exploits. You get enough building blocks to get general purpose programming, and it's "just" matter of mapping to those building blocks. X86 "mov" is a bit of a cheat, though. It's a single mnemonic for what's really dozens of quite different instructions. For example, ARM has "mov" for register-register operations, but "ldr/str" for register-memory, while X86 just uses mov for everything. Even ARM mov optionally puts a barrel shifter into the path, so it's not that pure either.
质疑 mov 是否算真正的'单一条指令'
并非要贬低作者,但把 MOV 称为'单条指令'相当牵强——它更像一大族恰好共用同一汇编助记符的指令。
stephencanon查看英文原文
Without taking anything away from the author, calling MOV a "single instruction" stretches things quite a bit. It's more of a big family of instructions that happen to share an assembly mnemonic.
补充另一个极端案例:仅靠页错误(trapcc)也能图灵完备
谁还需要指令?页错误也是图灵完备的:https://github.com/jbangert/trapcc
M2Ys4U查看英文原文
Who needs instructions? Page faults are Turing complete: https://github.com/jbangert/trapcc
推荐作者的视频讲解,直观展示实现过程
推荐页面链接的视频演讲,作者演示了他如何把 mov 变成一台机器,非常怪异又有趣!
ianbicking查看英文原文
I'd recommend the video presentation linked off the page, where he walks through how he actually turned mov into a machine. It's very weird and interesting! https://www.youtube.com/watch?v=R7EEoWg6Ekk
历次讨论
同类还值得读
位运算技巧集
Bit Twiddling Hacks
斯坦福页面上的经典位运算技巧合集,收录了 popcount、前导/尾随零、位反转、交换、舍入等大量技巧,并附有解释和性能讨论。
算法与计算机科学上首页 8 次 · 2011–2024graphics.stanford.edu编辑精选如何不按平均评分排序
How Not To Sort By Average Rating
经典文章解释了为什么按平均评分排序不可靠:只有少量评价的条目(比如仅一条五星)会轻易排到最前,而评价数量的差异被忽略。
算法与计算机科学上首页 7 次 · 2009–2024evanmiller.org编辑精选数据结构可视化
Data Structure Visualizations
旧金山大学 David Galles 教授制作的数据结构与算法交互式可视化网站,涵盖 B 树、红黑树、排序、图算法等,可逐步操作观察其运行过程。
算法与计算机科学上首页 6 次 · 2011–2021cs.usfca.edu编辑精选1996 年以来的计算机科学最佳论文奖
Best Paper Awards in Computer Science since 1996
Jeff Huang 维护的一个汇总页面,收录了自 1996 年以来计算机科学各主要会议的“最佳论文奖”获奖名单,并按年份和会议整理,方便读者一站式浏览历届获奖论文。
算法与计算机科学上首页 6 次 · 2010–2018jeffhuang.com编辑精选算法(Jeff Erickson)
Algorithms, by Jeff Erickson
伊利诺伊大学 Jeff Erickson 教授的算法课教材,免费在线开放。
算法与计算机科学上首页 5 次 · 2018–2022jeffe.cs.illinois.edu编辑精选