{"source":{"id":"mb-20260827-ea4977","title":"在 2500 亿条全局缓存的尺度下，结构体里每多留一个无用字段，代价是 15000 GB 物理内存","url":"https://mubeitech.com/p/mb-20260827-ea4977"},"method":"semantic-similarity","count":2,"items":[{"rank":1,"id":"mb-20260827-5f4919","account":"mubei","brand":"","title":"在一个 30MB 的程序里，哪怕只改动一行代码","summary":"在一个 30MB 的程序里，哪怕只改动一行代码","body":"在一个 30MB 的程序里，哪怕只改动一行代码。\n整整 4MB 的底层字节全被重新洗了一遍。\n13% 的机器指令、所有的跨函数调用、以及整张函数表，瞬间全部变样。\n如果改动涉及几个功能模块，超过 70% 的字节都会面目全非。\n可你在源码里，明明只是修改了一个字符。\n为什么一个微小的改动，会引发整座二进制大厦的雪崩？\n因为现代编译系统在排布代码时，所有函数都是首尾相连紧密贴合的。\n排在中间的函数稍微变长了几个字节。\n排在它后面的成千上万个函数，在内存里的物理地址全被硬生生往后推了一格。\n每一个跳向这些函数的调用指令。\n每一个跨区域的指针引用。\n全都被链接器重新修改了一遍地址。\n更要命的是 Go 语言的自身机制。\n为了在程序崩溃时能打印出精准的堆栈和行号。\n编译器在程序里塞进了一张庞大的函数元数据表。\n这张表独占了整个程序将近三分之一的体积。\n骨牌一旦倒下，整张表里的几十万个偏移量记录，瞬间全被重写。\n过去二十年里，全世界分发软件更新，用的都是通用的二进制差分工具。\n比如经典的 bsdiff。\n这类工具的底层逻辑。\n是把编译好的可执行文件，当成一串毫无意义的黑盒字节流。\n面对这种雪崩式的地址移位，通用算法根本看不懂发生了什么。\n它只能老老实实把每一个变动过的地址当成全新的数据，打包进补丁文件里。\n结果就是：哪怕只改动一行代码。\n通用压缩工具生成的增量补丁，依然高达 150KB 到 500KB。\n如果是在机房之间分发还好。\n但在弱网环境或者跨国网络中。\n遇到 1% 的网络丢包。\n每多几十 KB 的冗余数据，传输耗时就会从几秒直接飙升到几分钟。\n解开这个死结的钥匙，藏在 Google 早年间做的一个精巧设计里。\n2009 年，Google 遇到了同样的难题。\n为了给全球数亿用户静默推送 Chrome 浏览器更新。\n工程师研发了一套名为 Courgette 的差分算法。\nGoogle 的核心洞见切中了要害：\n可执行文件不是随机生成的噪音，它是由严密的编译器逻辑塑造出来的结构体。\n既然两台机器都知道编译器是怎么工作的。\n为什么要在网络上传输那些本来就能推算出来的地址变化？\nGoogle 的做法很大胆：\n把旧版本和新版本全部反汇编。\n将所有具体的内存地址抹平，换成抽象的符号标签。\n只在纯逻辑层面做差分。\n补丁体积瞬间从几百 KB 砍到了几十 KB。\n而开源项目 go-binsync 把这个思路推到了更深处。\n它甚至不需要做繁琐且容易出错的反汇编。\n因为 Go 语言哪怕剥离了所有调试符号。\n内部依然完整保留着那张结构规整的函数表。\n新旧两个版本的程序一碰头。\n工具直接读取这张函数表，按函数名对齐每一个代码块。\n只要知道哪几个函数变长了。\n接收端直接在本地模拟编译器的排布规则。\n分毫不差地预测出后面每一个函数挪到了什么新地址。\n它根本不需要在网线上传输那几十万处被挪动的指针。\n它只需要传输真正新增的几行机器码，外加一份极短的预测纠偏记录。\n这台机器跑出来的数字相当惊人。\n在一个 30MB 的程序里改动一行代码：\n通用差分工具 bsdiff 生成的补丁是 150,475 字节。\n而采用结构预测编码的补丁，只有 2,262 字节。\n补丁体积瞬间缩小了 67 倍。\n哪怕只是在一个字符串里加了 3 个字节。\n补丁更是直接被压到了 438 个字节。\n在 Prometheus 监控系统的真实版本升级中：\n从 3.13.1 到 3.13.2，面对 94MB 剥离符号后的程序。\n全量压缩下载需要传输 20.6MB。\n通用差分需要 2.69MB。\n而结构预测补丁只有 95KB，体积缩小了整整 28 倍。\n在 20Mbps 带宽加 1% 丢包率的常规网络下。\n全量下载需要 2.4 分钟。\n通用差分需要 15 秒。\n而它只需要 1.0 秒。\n甚至因为省去了构建全文件后缀数组的暴力计算。\n补丁的生成速度反而比传统工具快了三倍。\n过去半个世纪的信息论，习惯把压缩当成纯粹的统计学博弈。\n数据被视作黑盒，算法在字节与概率之间寻找重复的模式。\n可软件从来不是无规律的黑盒。\n最高级的压缩，从来不是在传输通道里寻找统计冗余。\n是把生成端的确定性逻辑，直接变成接收端的推演引擎。\n当通信的两端共享了同一套编译规律。\n物理网络真正需要承载的，就只剩下那些无法被逻辑推演出来的意外。","category":"科技","score":null,"translated_x_url":null,"translated_status_id":null,"published_at":"2026-08-27 22:36:41","created_at":"2026-08-27 22:36:41","url":"https://mubeitech.com/p/mb-20260827-5f4919","markdown_url":"https://mubeitech.com/p/mb-20260827-5f4919/markdown"},{"rank":2,"id":"mb-20260827-29d891","account":"mubei","brand":"","title":"把任天堂 64 游戏卡带逆向成 100% 逐字节一致的 C 语言源码，过去需要花近两年，现在被压缩到了 84 天","summary":"把任天堂 64 游戏卡带逆向成 100% 逐字节一致的 C 语言源码，过去需要花近两年，现在被压缩到了 84 天","body":"把任天堂 64 游戏卡带逆向成 100% 逐字节一致的 C 语言源码，过去需要花近两年，现在被压缩到了 84 天。\n很多人以为，这只是大语言模型写代码速度快。\n但如果把汇编代码直接丢给模型，它会在最后 10% 的长尾困境里彻底卡死。\n因为这项任务的目标，不是让游戏能在电脑上跑起来。\n它的标准严苛到近乎偏执：你写出来的每一行 C 代码，用三十年前的原版编译器重新编译后，生成的二进制机器码必须与 1997 年发售的卡带逐字节 100% 完全相同。\n只要漏掉一个括号，或者改动一行循环的写法，编译器吐出来的寄存器分配就会彻底面目全非。\n为什么过去耗时 596 天的硬核工程，能在不到三个月里被暴力攻破？\n难道模型真的看懂了三十年前古董芯片的全部秘密？\n把这套逆向流水线拆开，会看到一台精密的协作机器。\n约束反馈驱动的跨工作区协同演化。\n逆向工程界把这个目标叫做精确匹配反编译。\n1997 年发售的《单板滑雪儿童》，包含 2145 个函数和 732 KB 的二进制代码。\n它当年使用的编译器，是硅谷图形公司专为任天堂 64 定制的闭源编译器 IDO 5.3。\n这款古董编译器有极其诡异的多阶段优化流水线。\n只要代码里出现四次迭代的循环，优化器就会默认把它强行完全展开。\n微小的语法变动，都会在编译器的内部流水线里引发雪崩效应。\n面对这种黑盒状态机，暴力穷举的搜索空间是天文数字。\n纯自动化工具脚本对这 2145 个函数的直接匹配率，只有可怜的 0.93%。\n真正的突破，来自一套把黑盒碰撞变成确定性进化的工程系统。\n系统先打通了跨工作区的实时向量检索。\n开发者拉起了四个并行的 Git 工作区，每个工作区由一个模型独立处理不同的函数。\n传统多分支开发中，各个工作区的进度互不可见，同步一次要等上一个小时。\n这套系统通过汇编指令的向量嵌入，实时跨分支扫描所有未合并的工作区。\n只要某一个模型偶然试探出了一种冷门指令模式，其他三个正在死磕类似函数的模型，立刻就能在本地读取这个参考样本。\n更关键的一步，是让编译器怪癖沉淀为自演化记忆库。\nIDO 5.3 确实怪异，但它的怪癖具有极高的重复性。\n模型每次摸索出一个寄存器分配的暗坑，就把它整理成结构化的规则文档。\n随着项目推进，这份文档变成了整套流水线的共享先验知识。\n配合能够单步重放编译器优化阶段的测试台，模型不再瞎猜代码差异，能精准判断这是逻辑结构问题，还是寄存器分配问题。\n第三重杠杆是显式的任务截止时间。\n每一个函数都有严格的时间预算。\n预算倒计时逼着模型在低级暴力排列和高层逻辑重构之间做权衡，果断放弃走不通的死胡同。\n最后托底的，是人类专家的关键支点。\n在全部匹配提交中，约有 4.8% 凝聚了社区顶级逆向专家的深度介入。\n专家专门对付编译器底层最晦涩的结构异常。\n没有这 4.8% 的人工破局点，流水线在 90% 进度处就会彻底停滞。\n真正的技术突破，从来不在于把模糊的要求扔给模型去碰运气。\n在于给概率模型装上一套严密的反馈收敛骨架。\n让经验跨分支实时流动，让黑盒工具的怪癖沉淀为规则，让顶级专家只打最硬的仗。\n当混乱的试错被改造成自我演化的闭环，封存在旧硬件里的三十年黑盒，就变成了可以快速复现的透明资产。","category":"科技","score":null,"translated_x_url":null,"translated_status_id":null,"published_at":"2026-08-27 21:12:46","created_at":"2026-08-27 21:12:46","url":"https://mubeitech.com/p/mb-20260827-29d891","markdown_url":"https://mubeitech.com/p/mb-20260827-29d891/markdown"}]}