跳到主要内容

V8中的控制流完整性

· 阅读需 9 分钟
Stephen Röttger

控制流完整性(CFI)是一项旨在防止利用漏洞劫持控制流的安全功能。其理念即使攻击者成功破坏了一个进程的内存,通过额外的完整性检查也可以阻止他们执行任意代码。在这篇博客中,我们将讨论在V8中启用CFI的相关工作。

加速 V8 堆快照

· 阅读需 11 分钟
Jose Dapena Paz

这篇博客文章由 José Dapena Paz (Igalia) 撰写,并得到了 Jason Williams (Bloomberg)、Ashley Claymore (Bloomberg)、Rob Palmer (Bloomberg)、Joyee Cheung (Igalia) 和 Shu-yu Guo (Google) 的贡献。

在这篇关于 V8 堆快照的文章中,我将谈谈由 Bloomberg 工程师发现的一些性能问题,以及我们如何解决这些问题,使 JavaScript 内存分析比以往更快。

问题描述

Bloomberg 的工程师正在诊断一个 JavaScript 应用中的内存泄漏问题。应用程序由于 内存不足 错误而失败。对于测试的应用程序,V8 的堆限制配置约为 1400 MB。一般情况下,V8 的垃圾收集器应该能够将堆使用保持在该限制以下,因此这些错误表明可能存在泄漏。

WebAssembly尾调用

· 阅读需 9 分钟
Thibaud Michaud, Thomas Lively

我们在V8 v11.2中推出了WebAssembly尾调用!在本文中,我们将简要介绍该提案,展示一个关于使用Emscripten的C++协程的有趣用例,并说明V8如何在内部处理尾调用。

什么是尾调用优化?

如果一个调用是当前函数在返回之前执行的最后一个指令,就称其处于尾部位置。编译器可以通过丢弃调用帧并将调用替换为跳转来优化此类调用。

这对递归函数尤其有用。例如,考虑以下用C语言编写的函数,该函数对链表中的元素求和:

int sum(List* list, int acc) {
if (list == nullptr) return acc;
return sum(list->next, acc + list->val);
}

使用常规调用,这会消耗𝒪(n)的堆栈空间:链表中的每个元素都会在调用堆栈中添加一个新的框架。如果列表足够长,这很快会导致堆栈溢出。通过将调用替换为跳转,尾调用优化实际上将此递归函数转化为一个使用𝒪(1)堆栈空间的循环:

Oilpan中的指针压缩

· 阅读需 14 分钟
Anton Bikineev 和 Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)),行走的反汇编程序

当我编译一个使用少于4GB RAM的程序时,却用64位指针,这绝对是愚蠢的。当这样的指针值出现在结构中时,既浪费了一半的内存,也实质上丢掉了一半的缓存。

Donald Knuth (2008)

停止发布版本博客文章

· 阅读需 3 分钟
郭书瑜 ([@shu_](https://twitter.com/_shu))

过去,每个新的V8发布分支都会有一篇博客文章。你可能注意到自v9.9以来就没有发布过版本博客文章。从v10.0开始,我们将不再为每个新分支发布版本博客文章。但是不用担心,你依然可以获得以前通过版本博客文章获取的信息!继续阅读,了解未来在哪里找到这些信息。

为C++改造时间内存安全

· 阅读需 11 分钟
Anton Bikineev, Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), Hannes Payer ([@PayerHannes](https://twitter.com/PayerHannes))
备注

注意: 本文最初发布在Google安全博客

Chrome的内存安全是一个持续不断的努力,以保护我们的用户。我们不断尝试使用不同的技术以超越恶意行为者。在这种精神下,这篇文章介绍了我们使用堆扫描技术来改进C++的内存安全的旅程。

更快地初始化具有新类特性的实例

· 阅读需 13 分钟
[Joyee Cheung](https://twitter.com/JoyeeCheung),实例初始化器

类字段从 v7.2 开始在 V8 中推出,私有类方法从 v8.4 开始推出。随着提案在 2021 年达到第 4 阶段后,V8 开始着手改善对新类特性的支持——在此之前,这些特性应用存在两大主要问题:

V8版本 v9.9发布

· 阅读需 3 分钟
Ingvar Stepanyan ([@RReverser](https://twitter.com/RReverser)), 达到99%的完成度

每隔四周,我们会创建一个新的V8分支,作为我们发布流程的一部分。每个版本都在Chrome Beta里程碑之前从V8的Git主分支创建分支。今天,我们很高兴宣布我们的最新分支,V8版本9.9,目前处于Beta阶段,并将在几周后与Chrome 99 Stable协调发布。V8 v9.9充满了各种面向开发者的功能。本文预览了这次发布的一些亮点。

Oilpan库

· 阅读需 6 分钟
Anton Bikineev、Omer Katz([@omerktz](https://twitter.com/omerktz))和Michael Lippautz([@mlippautz](https://twitter.com/mlippautz)),高效且有效的文件搬运者

虽然此篇文章标题可能暗示深入探讨有关油底壳的书籍集合——这个主题因其设计规范意外地涉及了大量文献——实际上,我们会仔细探讨Oilpan,它是一个通过V8作为库托管的C++垃圾回收器,从V8 v9.4开始。