直到最近,在计算史上,硬件体系结构才出现明显的震荡,TOP500榜单就是最好的证明。在电话、路由器、大型机和汽车之外,围绕x86的共识是如此强烈,以至于我会将其与巴贝尔塔相提并论。多亏了莱纳斯·托瓦尔兹,我们不仅在体系结构上达成了共识,而且我们几乎就输入输出机制达成了共识,程序通过Syscall指令就是通过这种机制与主机进行通信的。在这一点上,我会把它比作巴贝尔塔(Tower Of Babel)。多亏了莱纳斯·托瓦尔兹(Linus Torvalds),我们不仅在架构上达成了共识,而且在输入输出机制上也非常接近达成共识。他做到了这一点,他穿着麻袍坐在家里给大公司发电子邮件,让他们同意把他们的资源投入到创造一些与公地悲剧完美相反的东西上。因此,我认为现在是对系统工程持乐观态度的最佳时期。我们在分享共同点方面的共识比以往任何时候都要多。仍然有一些离群点,比如我们在新闻中听到的苹果和微软的计划,他们试图将PC机转移到更远的地方。我不确定为什么我们需要一台C级的麦金塔电脑,因为86_64项专利应该在今年到期。苹果可能不需要支付版税就可以制造他们自己的x86芯片。我们梦寐以求的自由/开放架构可能会变成我们已经在使用的架构。如果微处理器体系结构最终达成共识,那么我相信我们应该专注于构建更好的工具,帮助软件开发人员从中受益。我一直致力于在这一领域做出贡献的方式之一,就是构建一种更友好的方式来可视化x86-64执行对内存的影响。它将有望阐明αcτµαlly pδrταblεεxεcµταblε的工作原理。您将注意到,执行开始时将Windows PEHeader视为代码。例如,ASCII字符串";MZqFpD";解码为POP%R10;JNO 0x4a;Jo 0x4a,字符串";\177ELF";解码为JG 0x47。然后它跳过一条mov语句,该语句告诉我们程序是从muserspace运行的,而不是引导的,然后跳到入口点。然后,可以使用分散化节和GNU汇编程序.sleb128指令轻松地为主机操作系统解压缩幻数。像Unicode位查找表这样的低熵数据通常会使用103字节的LZ4解压缩器或17字节的游程长度解码器进行解码,而运行时代码变形可以使用英特尔的3kbx86解码器轻松完成。请注意,此模拟器不是必需的。αcτµαlly pδrταblεεxεcµταblε如果您只是在外壳、nt命令提示符或从BIOS引导它们,则它们工作正常。这不是JVM。只有在需要时才使用仿真器。例如,能够对程序执行如何影响内存进行可视化是很有帮助的。很高兴知道,我们编写的任何普通PC程序都是在Raspberry Pi和Apple arm上运行的。我们所要做的就是在我们的x86可执行文件中嵌入上面模拟器的一个ARMbuild,并适当地进行变形和重新执行,类似于Cosmopolitan已经在对qemu-x86_64所做的操作,只是这不需要事先安装。(#39;{#**$$}{##**$$}}{##**$$}。权衡的是,如果我们这样做,二进制文件将只比Go';的Hello World小10倍,而不是100倍。另一个权衡是GCC运行时异常禁止代码变形,但我已经通过重写GNU运行时为您解决了这一问题。使x86-64-linux-gnu尽可能小,并提供完全仿真的最引人注目的用例是,它使得普通的简单原生程序能够在任何地方运行,包括默认情况下的web浏览器。在这一领域构建的许多解决方案往往将重点放在尚未达成共识的界面上,如GUI和线程,否则它们只会模拟整个操作系统,如Docker或Fabrice Bellard在浏览器中运行Windows。我认为我们需要兼容性胶水,它只运行程序,忽略系统,并将x86_64-linux-gnu视为规范的软件编码。我喜欢使用这些老掉牙的技术的原因之一是,我希望我所从事的任何软件工作都能以最少的努力经受住时间的考验。类似于超级马里奥兄弟ROM在不需要GitHubIssue追踪器的情况下存活了这么多年。我相信我们做到这一点的最好机会是将已经达成数十年共识的二进制接口粘合在一起,而忽略API。例如,以下是Mac、Linux、BSD和Windows发行版使用的幻数。它们在你的生活中至少值得看一次,因为这些数字支撑着你使用过的几乎所有计算机、服务器和电话的内部结构。如果我们关注所有系统共享的数字子集,并将其与它们的共同祖先贝尔系统5进行比较,我们可以看到系统工程几乎没有什么变化