-
好奇害死猫 苹果“1970事件”是什么在搞鬼
2016/2/28 8:42:48 来源:中国产业发展研究网 【字体:大 中 小】【收藏本页】【打印】【关闭】
核心提示: 近日,苹果“1970事件”闹得沸沸扬扬,有许多使用iOS设备的好奇人士“好奇害死猫”,抱着好奇的态度,结果自己的爱机真的变砖了。据了解,运行iOS8以上系统的近日,苹果“1970事件”闹得沸沸扬扬,有许多使用iOS设备的好奇人士“好奇害死猫”,抱着好奇的态度,结果自己的爱机真的变砖了。据了解,运行iOS8以上系统的64位处理器的设备几乎无一幸免,把iPhone、iPad或iPodtouch的时间设定为1970年1月1日,然后关机再开机,手机就变成一块“砖头”。下面让我们看看“1970”到底是什么“鬼”。
在了解“1970年事件”时,我们需要了解一个知识就是Unix时间戳。iOS系统时间使用Unix时间戳(Unixepoch)表示(time_t数据类型)。在系统中,使用系统位数个二进制位储存时间。Unix时间戳规定,UTC时区的1970年1月1日0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。
有了这个知识储备,我们现在了解一下搭载64位处理器的iOS设备的时间bug。我们说到了以UTC时区的1970年1月1日0点0时0秒为界限,数值为0,时间正常流逝为正数,反之为负数。不过各位需要留意的是,时间受到时区的影响。
假设一种情况,我原来是北京时区,假设将时间设置到了1970年1月1日0点0时0秒,那么我将这个时间转换为UTC时间,公式:北京时间=GMT+8=UTC+8,那么UTC时间则为1969年12月31日16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡在Kernel阶段,时间错误,无法继续进行启动。
那么既然事件不能往前调,好奇的朋友可能会往后调,当我们往后调的时候会发现iOS系统可以设置的最大时间是2038年1月1日,并不能再往后设置了。为什么时间只能调到这里?
手机时间计算原理
我们了解一下在32位系统中,time_t是长度为32位的,有符号整数(signedint)类型。首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反之;其余的31位用来记数。当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。介时,将出现“时间回归”的情况,系统时间变为1901年12月13日20时45分52秒,系统将会出现错误。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,邮箱:cidr@chinaidr.com。 -
- 直达16个行业