记录一些奇技淫巧,方便查阅
0.调试环境配置
v8调试环境可以使用v8安装目录下的/tools/gdbinit并将它加入根目录下.gdbinit配置里,修改.gdbinit配置
sudo gedit ~/.gdbinit
添加配置(可以配合其他gdb插件如pwndbg使用),
source path/to/gdbinit
使用gdb调试时可以先加载要调试的d8文件,然后设置启动参数
set args --allow-natives-syntax xxx.js
其中xxx.js可以在要调试的地方设置输出点和断点
%DebugPrint(obj) // 输出对象地址 %SystemBreak() // 触发调试中断
使用d8 --help | grep print可以查看d8的辅助调试命令,以下纪录一些常用的
1.job addr查看addr处的js数据类型结构体
2.--print-ast 查看v8生成的抽象语法树
3.--print-bytecode 查看生成的字节码
4.--trace-parse 查看v8解析编译代码的顺序和生成时间(v8解析js代码时并没有解析编译全部代码,因为不是所有代码都会马上执行,使用此命令可以查看js中v8立即运行的解析编译的代码部分)
5.--trace-opt-verbose 查看代码优化情况和优化原因,--trace-deopt 查看代码去优化的情况和原因
6.--print-opt-code 查看优化过的汇编代码(%OptimizeFunctionOnNextCall())
7.--trace-gc 查看gc
8.--trace-ic 查看函数使用的对象类型
9.--code-comments 优化代码注释
10.--trace-bailout 查找不能被优化的代码
11.--expose-gc 允许手动执行垃圾回收机制