同步推微信公众账号
同步推微信番鼠公众账号
手机客户端

【科普】神奇的“1970年1月1日”是如何让iPhone崩溃变砖的?

文章概要:

如今苹果已经在官网上承认这个 BUG,并表示会在未来发布软件更新(或将是 iOS 9.3 beta 4)修复问题。

前几日,有人发现苹果iOS设备的“1970 变砖”漏洞,即将 iPhone 的日期调整到 1970 年 1 月 1 日,再重启手机,iPhone 将有可能变砖。

如今苹果已经在官网上承认这个 BUG,并表示会在未来发布软件更新(或将是 iOS 9.3 beta 4)修复问题。

【科普】神奇的“1970年1月1日”是如何让iPhone崩溃变砖的?

我们也常在其他电子产品中看到初始状态时间为 1970 年 1 月 1 日,为什么总是出现神奇的 “1970 年 1 月 1 日”,它又是怎么让 iPhone 崩溃变砖的?

经常在 YouTube 上讲解苹果产品 BUG 及解决方案的汤姆斯科特(Tom Scott)此次也根据他自己的猜测做出了解释。

斯科特简单介绍了 Unix 系统的时间机制,并解释了他认为 iPhone 变砖的原因,即引发“整数下溢错误”

对 iPhone 来说,时间是一个整型变量,而变量值是从 1970 年 1 月 1 日开始的秒数。这个日期是Day Zero (第0天),所有后续日期都是在此基础上进行计算。如果将时间设置为 1970 年 1 月 1 日,那么这个值将变为 0。

这本身不会带来问题,但如果手机试图显示一个早于这一时间点的时间,例如手机里的软件很可能会试图计算电池寿命估计或者其他任何相关时间,而这些“其它相关事情”的时间日期发生于第 0 天之前。那么这个值会变成负数,从而导致系统崩溃。

【科普】神奇的“1970年1月1日”是如何让iPhone崩溃变砖的?

例如以 32 位系统举例,在 32 位系统中,首个二进制位是符号位,用来储存正负。正数则为 1970/1/1 以后的时间,负数反之。其余的 31 位用来记数。当时间到达 2038 年 1 月 19 日 3 时 14 分 08 秒时,数值位全部向前进 1,导致符号位被置 1,其余 31 位为 0。介时,将出现『时间回归』的情况,系统时间变为 1901 年 12 月 13 日 20 时 45 分 52 秒,系统将会出现错误。

【科普】神奇的“1970年1月1日”是如何让iPhone崩溃变砖的?

因此,苹果为了避免这种问题导致的错误发生,将最大时间期限定在了 2038 年 1 月 1 日 23 时 59 分 59 秒。这样即使超出这个范围,在 18 天内也不会有太大问题,况且 32 位设备到那个时候基本都已经淘汰了。

而 64 位系统通过计算,未来的 292,277,026,596 年 12 月 04 日 15 时 30 分 08 秒是 64 位系统可以表示的最大时间。

虽然此次苹果在官网并没有明确表示造成 BUG 的具体原因,不过,斯科特的视频仍然值得一看。

发表于2016年2月18日 / iPhone 同步推资讯,iPad 同步推资讯,万事屋,一周专栏,周四 / 来源:则卷大饼

93人赞过

分享到  

标签:bug1970年1970变砖时间机制

转载请注明 《【科普】神奇的“1970年1月1日”是如何...》转自同步推资讯 | news.tongbu.com