Google Chromeが 34以降でクラッシュする原因
Google Chrome 34以降を起動後一定時間するとクラッシュする理由が判明しました
01EBA296 8B 84 81 80 00 00 00 mov eax,dword ptr [ecx+eax*4+80h] 01EBA29D 85 C0 test eax,eax 01EBA29F 0F 84 85 00 00 00 je 01EBA32A 01EBA2A5 C1 E8 02 shr eax,2 01EBA2A8 83 3C 81 00 cmp dword ptr [ecx+eax*4],0 01EBA2AC 53 push ebx 01EBA2AD 8D 1C 81 lea ebx,[ecx+eax*4] |
アドレス、01EBA296の命令で特定の場所のアドレスをロードするのですが、それを4で割って、
再び4かけて計算しています。
なんでこんなことやってるか分かりませんが、このアドレスが4の倍数じゃない場合、切り捨てられて異常な値を読みだしてクラッシュすることが分かりました。
多分コンパイラの最適化のバグだと思いますが…。
ALIGN 4を厳密に適用すれば落ちなくなりました・ω・
これで、 Google Chrome 36 までが安定起動するように…。
Chrome 37 以降は、インターネットになぜかつながらなくなるんですよね…。
なんでだろう?
Comments