当前位置: 首页 > article >正文

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

  1. 从 git 上获取 depot_tools 谷歌工具包

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  1. 将工具包路径配置到高级环境配置——系统配置——path 中去

获取 V8 源码

fetch v8

更新 V8 源码

  1. 切换到指定的 tag 版本

# 10.8.168.25 这个版本是 chatknow 的 electron 用到的V8版本,也即浏览器版本108.168这样
git checkout 10.8.168.25

# 切换后务必要更新
gclient sync

安装 vs2022 版本

  1. 如果是第一次安装,则全部默认路径安装在 C 盘,会省很大力气

  2. 其中 Windows SDK 这个 VS2022 会在 C 盘不足的情况下,找个其他剩余容量比较大的盘装进去,此时就不好找了,利用 everything 快速搜索 Windows Kits,可通过更改注册表强行将 Windows SDK 给改回到 v8 默认的 C 盘默认的路径下去

    1. 参考 更改Windows Kits的安装目录-CSDN博客

build 脚本

  1. 之前谷歌浏览器编译,是用 gn ,ninja 两个可执行文件,但是 V8 代码你直接执行 gn,ninja 都报一个 py 的问题,B 站作者给了一种方式,是到 v8\tools\dev找到 gm.py 文件,在 main 里加一行运行,这样好像就不会报 gn.exe,ninja.exe 找不到的问题,也不用拷贝过来,拷贝过去

  1. vs2022 路径的问题,可以参考这里的代码 v8/build/vs_toolchain.py其实到这里都还没正式运行 C 编译呢,还都是 python 的范畴

    1. 注意 Python 版本问题,这里使用的是 python10,可以用 conda 来调整 python 版本,在 pycharm 中进行选择性运行

    2. 网上说的那些 WINDOWSDKDIR,以及vs2022_install,DEPOT_TOOLS_WIN_TOOLCHAIN,都可以在 pycharm 执行命令时配置,这样不污染全局

    3. 为什么会有这几个变量??,你看看上面的 vs_toolchain.py 源码就知道了

vs_toolchain.py 源码

WINDOWSSDKDIR 默认会去 C 盘找,如果你不设置的话,配置后就没有问题

VS2022 的库包依赖截图

以上环境搞完后,直接运行 gm.py 脚本,即可生成一个 d8.exe 可执行文件

 


http://www.kler.cn/a/599161.html

相关文章:

  • vue3 如何清空 let arr = reactive([])
  • React Native集成到现有原生Android应用
  • WebGPU实战:Three.js性能优化新纪元
  • SpringMVC请求和响应
  • 练习题:101
  • 腾讯云大模型知识引擎x deepseek:打造智能服装搭配新体验
  • 详解Spark executor
  • vue中keep-alive组件的使用
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能示例14,TableView15_14多功能组合的导出表格示例
  • C++——权限初识
  • 炫酷的3D卡片翻转画廊实现教程
  • 使用ES支持树状结构查询实战
  • 蓝桥杯 - 中等 - 智能停车系统
  • 大数据(2)Hadoop架构深度拆解:HDFS与MapReduce企业级实战与高阶调优
  • 《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型
  • MQ 消息幂等性保证
  • Pycharm社区版创建Flask项目详解
  • 大数据学习(84)-Hive数仓
  • WPF TemplateBinding与TemplatedParent区别
  • 面试计算机操作系统解析(一中)