环境:
Ubuntu16.04
终端代理:
我这里用的是某R,客户端用的是electron-**r,所以免去了http代理设置,但仍需要设置终端代理:
1  | export http_proxy=http://127.0.0.1:12333  | 
以上端口根据http代理设置端口更改,且该设置方法只作用于当前终端,不会影响环境。
注意点:
这里可以先测试一下是否加上代理:
1  | curl http://www.google.com  | 
如果成功,那么就是配置完成。
但是如果仍旧无法git下depot_tools,并且报了RPC Failed错误,那么这时候不要去网上找解决方案,你只需要换一个代理,换到不报错就行。个人猜测是代理不稳定的缘故。(希望大家遇不到这种错,我的血泪教训,搞这问题搞哭了orz
安装depot_tools:
1  | git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git  | 
这里的.zshrc或者.bashrc根据自己环境更改,/path/to根据路径更改。
安装ninja:
1  | git clone https://github.com/ninja-build/ninja.git  | 
生效zshrc:
1  | source ~/.zshrc  | 
编译v8:
1  | fetch v8  | 
debug模式:
1  | tools/dev/v8gen.py x64.debug  | 
release模式:
1  | tools/dev/v8gen.py x64.relase  | 
注意点:
这里在fetch或者ninja -C过程中会有报错,有很大的原因是因为机子的内存分配不够(编译需要跑的比较好orz。加到4G以上一般编译就很流畅了。如果是中途中断了,那么用gclient sync即可从之前断点开始跑。
编译完成后在x64.debug下的d8就是引擎了。
调试不同版本:
在分析之前漏洞的时候需要check到之前的分支去调试。
假如我需要分析hash为2bd7464ec1efc9eb24a38f7400119a5f2257f6e6的版本,那么我们切回分支:
1  | git reset --hard 2bd7464ec1efc9eb24a38f7400119a5f2257f6e6  | 
即可得到有漏洞版本的d8。
如果是自己所编写的带漏洞的版本那么便需要apply上diff文件:
1  | git checkout 2bd7464ec1efc9eb24a38f7400119a5f2257f6e6  |