v8 老版本(4.8)编译大坑记录

前言

由于需要研究一下老版本(4.8) v8的一些漏洞,需要编译一个老版本的v8(d8?),但是发现这条路真的大坑无数,所以稍微记一下,由于是凭记忆记的,可能不是很全。。

获取代码

首先获取代码已经是个大坑。

depot_tools

正常获取代码的方法是不行的,需要用到google的depot_tools。具体获取方案新老v8差距不大,获取最新的即可。具体可以按照v8 wiki里的方法安装。

这里注意设置好环境变量,以及这个工具用的是python2,默认python3会很蛋疼,为了避免改动每一个脚本,于是我使用了virtualenv,在virtualenv里运行这个工具。

fetch v8

按照wiki,在gclient能够正常运行之后就可以fetch v8获取代码了。但是事实是,你还需要设置代理。

shadowsocks的具体用法就不赘述了,然而比较麻烦的是shadowsocks使用的是socks5协议,虽然可以使用proxychains进行代理,然而我发现在gclient sync(或者第一次fetch v8的时候)会使用到一个gs://协议的东西,猜测可能是google自己的什么玩意儿,总之用proxychains没办法简单解决了,大概是因为走的不是http还是怎样。

看了一下代码,这个协议用处主要在download_from_google_storage.py中,应该是用来从google storage下东西的,反正只要想办法下下来就行。代码里边有一些远程lschmod之类的操作,我们只想下东西,于是最后我做了一些改动,用python调用wget来下载,把lschmod之类的都注释掉,改动后的文件在这(只做了简单改动,需要系统里有wget,不保证能用,但是可以按照这个思路改动),思路主要是把gs换成了个能下东西的http url。

这样的话,用fetch v8或者gclient sync应该能够下下来代码了。

老版本代码

好了现在有了新版本代码了,新版本编译还是比较简单的,只要按着wiki上说的就好,但是老版本就没这么幸运了。。

还是第一步,下代码,在git checkout之后,还需要一次gclient sync(应该是用来下第三方依赖),如果之前是用proxychains解决代理问题的,这个时候会碰到一个十分诡异的问题:

gyp: Call to 'cd .. && python -c "import os; print os.getcwd()"' returned exit status 0 while in /home/anciety/sources/v8/v8/build/all.gyp.

我看了一下代码,发现没有明显的出错的可能,后来发现只要没有proxychains就不会有这个错。。原因不明。

so,我们需要代理才能够下东西,但是proxychains用不了了,最终我的解决方法是用poliposocks5http转换一下(虽然polipo好像已经停止维护了),然后设置http代理。

具体方法参照此处(只需要polipo配置的部分即可,以及https的代理也是http开头,这个地方原文有误)。

之后就可以不用proxychains直接下代码了。

编译

新版编译其实问题是不大的,老版坑比较多。

使用ninja编译

新版的doc是不适用老版的,应该是build系统做过调整了,在docs里有build的tutorial,本来也支持make+gcc,但是我没有尝试成功。

使用ninja进行编译做了几个改动:
* 改动out/Debug/build.ninja最开始的地方,由于我本机clang版本高于third_party里的版本,include文件之类的也是新的(archlinux滚动更新),所以用老的clang会有各种想象不到的错误。将cccxx两个路径(位于开始的地方附近)改为本机的路径/bin/clang/bin/clang++
* 改动'build.ninja,cxx里command = $cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc -Wno-unused-private-field -Wno-error=undefined-var-template $cflags_pch_cc -c $in -o $out,主要supress了两个warning,由于warning会被当成error,这里猜测可能是老版clang还没有这两个check,导致现在check出warning变成error编译不过。
* 将本机的ld.gold软链接进入third_party/binutils/Linux_x64/Release/bin/ld.gold同样是由于我是新版系统,ld的一些东西好像也会出现不支持。

修改之后的build.ninja

到现在就可以通过ninja -C out/Debug进行编译了。

总结

C++ build system坑真多。。

代理真麻烦。。

展开阅读全文
©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读