前言 搭个环境而已,花了我n久,哭泣。。。
这里就讲下自己搭环境的经过,,,
使用的环境:ubuntu 18.04
初次尝试:本地 参考博客 主要参考的是这两篇博客:
https://eternalsakura13.com/2018/05/06/v8/
https://bbs.pediy.com/thread-252812.htm
vpn
我的本地代理,开了没用,不知道为什么,本机可以上google,但是虚拟机里怎么都不可以,,,然后,,选择在虚拟机里面使用vpn
这个是我用的:https://neworld.date/user(简单好用而且不贵)
linux的教程:https://support.neworld.date/linux/(不要用自动配置,一次性的,后面出问题了,还是要上手动配置)
别的问题不大,注意的两点是:
1.要使用的时候,需要在命令前面加上proxychains4
2.选择节点的时候,一定要选择有人的
3.一定是root账户
4.在/root目录下
执行命令 proxychains4 curl myip.ipip.net
。如果显示empty server类似的
那就重新来一遍(建议:wmware弄个快照,,每次都重新配,心真的很累),,,我当时玄学,学校里的网不行(貌似是因为校园网不能翻外网),连了自己的热点就可以了。
环境搭建 依赖 1 apt-get install binutils python2.7 perl socat git build-essential gdb gdbserver
工具 这个工具是用来得到v8源码的
1 2 3 root$ cd ~ (proxychains4 )git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git echo 'export PATH=$PATH:"/root/depot_tools"' >> ~/.bashrc
ninja 这个工具是用来编译v8的
1 2 3 4 root$ cd ~ (proxychains4 )git clone https://github.com/ninja-build/ninja.git cd ninja && ./configure.py --bootstrap && cd .. echo 'export PATH=$PATH:"/root/ninja"' >> ~/.bashrc
echo两句命令,主要是写入环境变量,后期fetch v8的时候,可能会说找不到fetch命令,可能就是环境变量没了,可以通过vim ~/.bashrc,查看最后面是否有下面这两句话,没有的话,加上
1 2 3 export PATH=$PATH:"/root/depot_tools" export PATH=$PATH:"/root/ninja" bash //载入环境变量
然后就是编译启动,我卡死在了v8,真的很慢,而且最后报错,,,出错,网上看了好多,也没解决,,,TAT
后面的步骤
v8编译 1 2 3 $ fetch v8 && cd v8&& gclient sync $ tools/dev/v8gen.py x64.debug $ ninja -C out.gn/x64.debug
启动 1 2 $ ./out/x64.debug/d8 $ ./out/x64.debug/shell
初始尝试失败,,搞了好久都没出来,,,,但是网上大部分都是这种方法
二次尝试 参考博客: https://eternalsakura13.com/2018/06/26/v8_environment/
服务器
sakura为我们提供了第二种方法,我一开始试了下,但是谷歌云搞不来,没有信用卡啥的。但是后来只能尝试这个,所以找了下其他国外的云服务器。
不需要代理啥的,真是舒服。
知乎上的这篇给了较好的帮助:https://zhuanlan.zhihu.com/p/130402190
我使用的是狗云,进来,“创建景点云服务器”,我一开始用的10G的硬盘,编译的时候发现太小了,然后只好销毁重来一个(这个只要三个工作日内,支持销毁退款)
操作系统选择这个:CentOS 7 BBR,ubuntu 18我也用了,但还是出问题了
然后进入“我的经典云服务器”,启动,用xshell远程连过去
环境搭建 fetch源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo yum groupinstall "Development Tools" sudo yum install -y git gdb bzip2 wget cd ~ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH=`pwd`/depot_tools:"$PATH" mkdir v8 cd v8 fetch v8 cd ~/v8/v8 git reset --hard 6dc88c191f5ecc5389dc26efa3ca0907faef3598(2019-starctf这道入门题) gclient sync ./tools/dev/v8gen.py x64.release(这个真的很慢,要耐心) ninja -C ./out.gn/x64.release # Release version ./tools/dev/v8gen.py x64.debug ninja -C ./out.gn/x64.debug # Debug version
release版本和debug版本 上面的12-15行中,12-13两行下载的是release版本,14-15行下载的是debug版本。release版本可以正常运行,但是有些调试信息不能用,如job命令,执行起来的时候,也会告诉我们,没有调试的符号。
1 2 3 pwndbg: loaded 186 commands. Type pwndbg [filter] for a list. pwndbg: created $rebase, $ida gdb functions (can be used with print/break) Reading symbols from ./d8...(no debugging symbols found)...done.
debug就是调试版本,可以输入更多的调试信息。虽然debug看着好,但是,,,后面有点问题,,,两个都下过来就好。
下过来之后,是这样的。
我们进入x64.debug就可以调试状态下运行d8。。同理release
搭建ftp服务器 1 2 3 4 5 6 cd ~ tar -czvf v8.tar v8 sudo yum install vsftpd -y systemctl start vsftpd.service(在CentOS7和它之前,启动vsftpd服务的指令是 service vsftpd start,之后要使用新指令) sudo netstat -nltp | grep 21 cp v8.tar /var/ftp/
然后,浏览器就可以访问到了,点击下载即可。
哇哇哇哇,感天动地,终于搞定了。
测试 实例程序(test.js):
1 2 3 4 5 6 7 8 9 var a = [1 ,2 ,3 ];var b = [1.1 , 2.2 , 3.3 ];var c = [a, b];%DebugPrint(a); %SystemBreak(); %DebugPrint(b); %SystemBreak(); %DebugPrint(c); %SystemBreak();
v8的gdb 1 2 3 4 5 6 7 8 cd ~/v8/v8/tools mv gdbinit gdbinit_v8 cp gdbinit_v8 ~/.gdbinit_v8 cd ~ vim .gdbinit #加入下面内容 source ~/.gdbinit_v8 source ~/v8/v8/tools/gdb-v8-support.py
命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 cd ~/v8/v8/out.gn/x64.debug/ 将test.js放到该目录下 gdb ./d8 gdb-peda$ set args --allow-natives-syntax ./test.js gdb-peda$ r pwndbg> r Starting program: /home/winter/v8/v8/out.gn/x64.debug/d8 --allow-natives-syntax ./test.js [...] DebugPrint: 0x3847d864df19: [JSArray] - map: 0x27aca0f42d99 <Map(PACKED_SMI_ELEMENTS)> [FastProperties] - prototype: 0x33ab2b711111 <JSArray[0]> - elements: 0x3847d864de39 <FixedArray[3]> [PACKED_SMI_ELEMENTS (COW)] - length: 3 - properties: 0x27d6f1300c71 <FixedArray[0]> { #length: 0x1f78960401a9 <AccessorInfo> (const accessor descriptor) } - elements: 0x3847d864de39 <FixedArray[3]> { 0: 1 1: 2 2: 3 } pwndbg> job 0x3847d864df19(这个地址根据第九行那里显示地址) 0x3847d864df19: [JSArray] - map: 0x27aca0f42d99 <Map(PACKED_SMI_ELEMENTS)> [FastProperties] - prototype: 0x33ab2b711111 <JSArray[0]> - elements: 0x3847d864de39 <FixedArray[3]> [PACKED_SMI_ELEMENTS (COW)] - length: 3 - properties: 0x27d6f1300c71 <FixedArray[0]> { #length: 0x1f78960401a9 <AccessorInfo> (const accessor descriptor) } - elements: 0x3847d864de39 <FixedArray[3]> { 0: 1 1: 2 2: 3 }
v8的gdb也可以了
更新 1 tools/dev/gm.py x64.debug d8