V8引擎源码编译踩坑实录
背景
为了解决 view8 代码没有指定的v8 版本的引擎问题GitHub - suleram/View8: View8 - Decompiles serialized V8 objects back into high-level readable code.
但是打出来了exe文件也没啥用,不清楚这个view8是解决啥逆向用的,如果想逆向electron的jsc,这个玩不了,趁早放弃
V8 定义
d8.exe 是 V8 引擎编译生成的一个可执行文件,作为调试壳(debug shell)存在,其作用总结如下:
-
运行 JavaScript:提供一个独立的 JavaScript 执行环境,可直接运行代码或脚本文件。
-
调试工具:用于分析 V8 的字节码、优化过程、内存布局等,帮助开发者调试和研究。
-
研究 V8:适合探索 V8 的编译、执行和垃圾回收机制。
-
轻量实验:无标准库和 DOM,专注于 V8 核心功能,适合教育和底层实验。
注意
用 cygwin64 是不行的,B 站有个 2020 年教程是用 window7+cygwin64 这种方式,但是现在版本不知道,运行 gclient sync 报错
配置depot_tools
-
从 git 上获取 depot_tools 谷歌工具包
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
-
将工具包路径配置到高级环境配置——系统配置——path 中去
获取 V8 源码
fetch v8
更新 V8 源码
-
切换到指定的 tag 版本
# 10.8.168.25 这个版本是 chatknow 的 electron 用到的V8版本,也即浏览器版本108.168这样
git checkout 10.8.168.25
# 切换后务必要更新
gclient sync
安装 vs2022 版本
-
如果是第一次安装,则全部默认路径安装在 C 盘,会省很大力气
-
其中 Windows SDK 这个 VS2022 会在 C 盘不足的情况下,找个其他剩余容量比较大的盘装进去,此时就不好找了,利用 everything 快速搜索
Windows Kits
,可通过更改注册表强行将 Windows SDK 给改回到 v8 默认的 C 盘默认的路径下去-
参考 更改Windows Kits的安装目录-CSDN博客
-
build 脚本
-
之前谷歌浏览器编译,是用 gn ,ninja 两个可执行文件,但是 V8 代码你直接执行 gn,ninja 都报一个 py 的问题,B 站作者给了一种方式,是到
v8\tools\dev
找到 gm.py 文件,在 main 里加一行运行,这样好像就不会报 gn.exe,ninja.exe 找不到的问题,也不用拷贝过来,拷贝过去
-
vs2022 路径的问题,可以参考这里的代码
v8/build/vs_toolchain.py
其实到这里都还没正式运行 C 编译呢,还都是 python 的范畴-
注意 Python 版本问题,这里使用的是 python10,可以用 conda 来调整 python 版本,在 pycharm 中进行选择性运行
-
网上说的那些 WINDOWSDKDIR,以及vs2022_install,DEPOT_TOOLS_WIN_TOOLCHAIN,都可以在 pycharm 执行命令时配置,这样不污染全局
-
为什么会有这几个变量??,你看看上面的 vs_toolchain.py 源码就知道了
-
vs_toolchain.py 源码
WINDOWSSDKDIR 默认会去 C 盘找,如果你不设置的话,配置后就没有问题
VS2022 的库包依赖截图
以上环境搞完后,直接运行 gm.py 脚本,即可生成一个 d8.exe 可执行文件