当前位置: 首页 > Web前端 > HTML

一个价值8.7亿刀的bug

时间:2023-03-28 01:19:54 HTML

大家好,我是Kason。一位老程序员前辈曾说过:没有经历过p0级bug的职业是不完整的。以上名言都是我编的。但是,作为程序员,您必须熟悉错误。您遇到的错误使公司付出了多少代价?在本文中,我们将研究一个导致8.7亿损失的漏洞。事故始于1996年6月4日,当时第一枚阿丽亚娜5号火箭在法属圭亚那海岸发射升空。此次发射耗资3.7亿,火箭搭载价值5亿的通信卫星,总投资8.7亿。升空37秒后,火箭朝错误的方向翻转了90度,助推器撕裂了空气,航天器被巨大的液态氢火球吞没。爆炸发生的那一刻,工程师甚至还在用法语报告:“所有设置正常,轨道正常。”主控室里威严的工程师和人群后方的骚动,说明这一切发生得太突然了。由于火箭卫星的毁坏,这场灾难性事故引发了公众调查,并将对地球磁层运作的科学研究推迟了近四年。阿丽亚娜5号事故被广泛认为是历史上最昂贵的漏洞之一。事故原因事故原因是浮点数溢出。阿丽亚娜系列火箭的应用包括一个用来判断火箭是上升还是下降的变量,称为水平偏差,以下简称BH。在设计阿丽亚娜五号的上一代火箭阿丽亚娜四号时,工程师详细分析了BH的边界条件,在确定永远不会超过一个16位整数(-32768~32767)的表示范围后,变量被定义为16位整数。但在阿丽亚娜5号中,由于火箭性能的提升,BH在大部分应用中被定义为64位浮点数,部分由于疏忽仍使用阿丽亚娜4号的16位整数。当这两段代码组合在一起时,它会尝试将一个64位浮点数分配给一个16位整数。在火箭上升的前几秒,火箭加速度较低,因此这两个值之间的过渡是成功的。无奈的是,随着火箭的加速越来越高,当值超过16位整数的可表示范围时,就发生了溢出。正常情况下,火箭发动机喷口接收飞行控制信息。但是在溢出发生后,收到了一个诊断位模式(表示发生了溢出),导致喷嘴出现异常,最后悲剧发生了……后记最后,欧洲航天局从分散在12个左右的地方召集了一个团队以平方公里为单位在火箭残骸中寻找线索,恢复事故发生时的数据。这次事故可以说是令人印象深刻。如果大家有什么印象深刻的bug,欢迎在评论区讨论。欢迎加入人类优质前端框架研究组,带头