环境:
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 |