首页
社区
课程
招聘
[原创] 记一次由源码构建 V8的过程
2023-8-16 17:13 2212

[原创] 记一次由源码构建 V8的过程

2023-8-16 17:13
2212

前言

一篇关于编译v8的工具文。记录了编译时的大概步骤,方便大伙编译时少踩坑,无脑跟步骤即可^。^
笔者的机器是m1的mac,如果使用linux编译,步骤因该大差不差。。。

v8官网

步骤

  1. 配置代理

    笔者使用的是mac,终端可能开了代理也不能使用代理,为此给终端配置可控制开关的代理。
    这是笔者使用的代理,安利一波~

    • 将下面代理写入 ~/.zshrc 或 ~/.zprefile文件中,再source 使用配置

      1
      2
      3
      4
      # proxy
      alias clashproxy='export http_proxy=http://127.0.0.1:7890;export https_proxy=http://127.0.0.1:7890;'
       
      alias unclashproxy='unset http_proxy https_proxy'
    • 配置好后可通过 clashproxy 给终端启用代理,使用 unclashproxy 关闭使用。可通过 curl ip.sb 查看IP变化

  2. 下载depot_tools

    • 创建编译环境的文件夹

      1
      2
      mkdir v8-env
      cd v8-env
    • 开始获取depot_tools

      1
      git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    • 将depot_tools路径添加进环境变量,并更新环境变量

      1
      2
      3
      ```text
      export PATH = "所在目录/depot_tools":$PATH
      ```
  3. 安装依赖

    • 进入depot_tools,安装依赖

      1
      gclient sync
    • 执行上面步骤,可能会失败。可在depot_tools文件下生成 .gclient文件,文件内容如下

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      solutions = [
          {
              "managed": False,
              "name": "src",
              "url": "https://chromium.googlesource.com/chromium/src.git",
              "custom_deps": {},
              "deps_file": ".DEPS.git",
              "safesync_url": "",
          },
      ]
    • 创建文件后,再执行 gclient sync,开始下载并进入漫长的等待。。。

      1
      2
      3
      4
      5
      # 查看文件下载大小
      du -h -d=1 depot_tools
       
      # 笔者下载后有70G+,读者流量酌情下载
      74G depot_tools
  4. fetch v8

    • 进入v8-env,开始fetch

      1
      fetch v8
    • 查看v8文件大小

      1
      2
      3
      du -h -d=1 v8
       
      4G  v8
  5. 编译v8

    • 笔者使用ninja编译,首先生成ninja构建文件,这样会在v8路径下生成生成 out.gn/x64.release 文件夹

      1
      2
      cd v8
      ./tools/dev/v8gen.py x64.release
    • 开始编译,此过程也比较漫长,耐心等待

      1
      ninja -C out.gn/x64.release
  6. 编译结束并测试

    • 编译完成后会在指定路径生成一个叫 d8 的动态链接库

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      # 查看d8类型
      # mac的动态链接库的文件类型是*mach-o*
      # linux下的为 *elf*
      # window下的为 *pe*
      file out.gn/x64.release/d8
      out.gn/x64.release/d8: Mach-O 64-bit executable x86_64
       
      # 查看d8大小
      du -h  out.gn/x64.release/d8
       38M    out.gn/x64.release/d8
    • 使用d8测试脚本

      1
      d8 是 v8 的简易 CLI,它提供了一个极简的 JS 宿主环境,可用于 v8 的学习和调试,比起 nodejs,它更精简和专注。除了 JS 以外,d8 也具有 WASM 的解释功能,可以方便地用于测试 WASM 模块的性能。如果你的 WASM 是要在浏览器里运行的,比起 wasmtime,v8(以及 spidermonkey 等主流浏览器 JS 引擎)显然是个更合适的命令行测试方案。
      1
      2
      3
      4
      5
      6
      7
      8
      /*
      js简易脚本
       
      执行命令 ./out.gn/x64.release/d8 ../t.js,便能在终端看到打印内容
      */
      for (var i = 0;i < 100;i++){
              console.log(i);
      }

总结

至此,编译过程结束,笔者使用mac下载编译,整个过程丝滑顺畅,如仍有疑问,请自行阅览相关资料解决或可留下评论。

参考文章


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回