-
好奇害死貓 蘋果“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。