Jan 1, 1970

2016-02-14 18:13:52 +08:00
 Showfom
群里看到的

https://www.reddit.com/r/jailbreak/comments/458ao3/discussion_changing_time_date_settings_to_jan_1/
3971 次点击
所在节点    iOS
17 条回复
IgniteWhite
2016-02-14 18:20:48 +08:00
日常
Tink
2016-02-14 18:45:38 +08:00
推上看到一个说法:八个小时后开机就好了
miyuki
2016-02-14 18:48:31 +08:00
VersusClyne
2016-02-14 19:08:08 +08:00
UTC 也好 GMT 也罢 最多不都是+12 或者-12 么 为什么八小时就可以 推论也应该是“ 12 小时以内”吧
wql
2016-02-14 19:55:33 +08:00
有些人作死改到 unix 时间起始点很早之前的日期的话就......... @Tink @VersusClyne
kn007
2016-02-14 19:58:25 +08:00
早上就看到了
VersusClyne
2016-02-14 20:02:33 +08:00
@wql 所以不是最低数值只能是 1970.1.1 0:00 utc-12 么 最多欠 12 小时的节奏?
mccally
2016-02-15 00:17:05 +08:00
iPhone 时间戳的 0000000000000000 是 1970.1.1 GMT+0 8:00 ,之前的都是负值,也就是未来。于是,设备呆掉了。。。
qq529633582
2016-02-15 00:17:33 +08:00
@VersusClyne 因为您在 utc+8 呀
aprikyblue
2016-02-15 02:38:12 +08:00
于是想起另一个问题, 2038 年以后怎么办。。。另类千年虫?
typcn
2016-02-15 08:44:55 +08:00
@VersusClyne unix 的 time_t 是有符号的 int64

也就是说,最小的 Unix 时间戳是 -2147483648 ,而不是 0
typcn
2016-02-15 08:52:37 +08:00
尝试用调试器跟进了一下,并没有发现什么问题
typcn
2016-02-15 08:58:35 +08:00
猜想:
BUG 在重启之前并没有触发,表明 kernel 和所有的用户态软件都是可以接受这个负时间值的,而且正常的开机流程并不会触发白底的界面,判断白底的界面是用代码手工 show 出来的,这更像是代码手动拒绝了开机,可能性比较大的就是开机的时候会验证一些东西,例如数字证书的过期时间,而这个证书验证程序用了 unsigned int 来表示时间,于是这个变量就溢出到了一个奇怪的值,这个证书被判定为过期,系统拒绝了开机。

拆了电池再装上能开机的原因应该是时间被重设到了 0
等几个小时能开机就证明了硬件时钟也是 signed int
bullettrain1433
2016-02-15 09:33:24 +08:00
@typcn 的确有理
ech0x
2016-02-15 10:31:40 +08:00
作为亲身试验过的人。第一会卡死而且 dfu 刷机无用,二要恢复目前只有拆机断电源是 100%可行的。
ech0x
2016-02-15 10:32:42 +08:00
@typcn 貌似时间的负值影响到了证书。
Liir
2016-02-15 20:34:28 +08:00
@aprikyblue 是啊,另一个千年虫

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX