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 以降は、インターネットになぜかつながらなくなるんですよね…。
なんでだろう?

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です