V8

搭建V8调试环境。

最开始是在mac上搞的,但是一直卡在同一个地方。后来搜到了2019大佬的这篇博客:

决定去ubuntu上来搭环境。不知道为啥自己1804的ubuntu特别卡(而且还丑),于是决定在1904的vmware上来做。

Proxy

我使用的代理在mac上,为了能够让虚拟机也可以使用代理,将代理的监听端口由127.0.0.1改为0.0.0.0。

image-20191105200829549

另外HTTP的也要改:

image-20191105200932245

虚拟机和mac用nat的方式连接。在mac上查看ip,为虚拟机的浏览器设置代理(手动模式):

image-20191105201132709

此时通过浏览器应该可以访问谷歌了。

设置git的代理:

1
git config --global http.proxy http://10.135.228.58:1087

设置终端http的代理:

1
2
export http_proxy="http://10.135.228.58:1087"
export https_proxy="http://10.135.228.58:1087”

之后输入bash打开新终端使得设置生效。

depot_tools

1
2
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo 'export PATH=$PATH:"/path/to/depot_tools"' >> ~/.bashrc

ninja

1
2
3
git clone https://github.com/ninja-build/ninja.git
cd ninja && ./configure.py --bootstrap && cd ..
echo 'export PATH=$PATH:"/path/to/ninja"' >> ~/.bashrc

compile

1
2
3
4
fetch v8
cd v8
# git reset --hard [commit hash with vulnerability]
gclient sync

Fetch v8的时候在ubuntu里面也卡了很久(有个叫icu的),不过mac里面这个文件夹是下好的,直接粘过去,终于成功了…gclient sync有时候会解压失败?重试就好了。

1
2
tools/dev/v8gen.py x64.debug
ninja -C out.gn/x64.debug

编译release版本的命令参考2019的博客。

run

1
./out.gn/x64.debug/d8

image-20191105212848325

Turbolizer

安装最新版本的nodejs:

1
2
3
sudo apt-get install curl software-properties-common
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs

启动turbolizer:

1
2
3
4
cd tools/turbolizer
npm i
npm run-script build
python -m SimpleHTTPServer

之后在mac上访问虚拟机ip:8000端口可以看到:

image-20191105211505688

现在知道师傅们之前发的那些看起来巨复杂的图是哪来的了…

gdb

~/.gdbinit中加入:

1
2
source /path/to/v8/tools/gdbinit
source /path/to/v8/tools/gdb-v8-support.py