V8 比以往更快、更安全!
· 閱讀時間約 8 分鐘
歡迎來到令人興奮的 V8 世界,在這裡速度不僅僅是一項功能,而是一種生活方式。當我們向 2023 年告別時,是時候慶祝 V8 今年取得的令人印象深刻的成就了。
通過創新的性能優化,V8 繼續在不斷演變的 Web 領域推進可能性的邊界。我們引入了一個新的中層編譯器,並對頂層編譯器基礎設施、運行時和垃圾回收器進行了多項改進,這些改進帶來了全方位的顯著速度提升。
歡迎來到令人興奮的 V8 世界,在這裡速度不僅僅是一項功能,而是一種生活方式。當我們向 2023 年告別時,是時候慶祝 V8 今年取得的令人印象深刻的成就了。
通過創新的性能優化,V8 繼續在不斷演變的 Web 領域推進可能性的邊界。我們引入了一個新的中層編譯器,並對頂層編譯器基礎設施、運行時和垃圾回收器進行了多項改進,這些改進帶來了全方位的顯著速度提升。
控制流完整性(CFI)是一種旨在防止利用漏洞劫持控制流程的安全功能。其核心理念是,即使攻擊者成功破壞了進程的記憶體,額外的完整性檢查也可以阻止他們執行任意代碼。在這篇部落格中,我們將討論我們在 V8 中啟用 CFI 的工作。
注意: 本文最初發表於 Google 安全部落格。
Chrome 中的記憶體安全性 是為了保護使用者而持續進行的努力。我們不斷地實驗不同的技術,以搶先惡意攻擊者一步。在這種精神下,本文將介紹我們使用堆積掃描技術改進 C++ 記憶體安全性的旅程。
在 JavaScript 中,如果分配的物件從外部可存取當前函式,那麼該物件即被認定為_逃逸_。通常,V8 將新物件分配到 JavaScript 堆中,但通過_逃逸分析_,優化編譯器可以判斷物件的生命週期是否確實束縛於函式的啟用。當對新分配物件的引用未逃逸創建它的函式時,JavaScript 引擎不需要顯式地將該物件分配到堆中。它們可以有效地將物件的值視為函式的局部變數。這反過來又可以實現各種優化,例如將這些值存儲在堆疊或寄存器中,或者在某些情況下,完全優化掉這些值。而逃逸的物件(更準確地說,無法證明它們不會逃逸的物件)必須在堆上分配。