如何将JS传输到本机代码(使用v8)

时间:2017-06-24 13:48:20

标签: javascript code-generation v8

我在网址中尝试过建议: How can I see the machine code generated by v8?

这是我做的:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools

sudo apt-get install libv8-dev
sudo apt-get install g++
sudo apt-get install libgtk2.0-dev
sudo apt-get install g++-multilib

export PATH="$PATH":`pwd`/depot_tools

fetch v8

gclient sync

make ia32.release objectprint=on disassembler=on

v8/out/ia32.release/d8 --print-all-code hello.js > output.txt

(脚本只是:print(“hello”))

以下是输出:

kind = STUB
major_key = JSEntryStub
compiler = unknown
Instructions (size = 131)
0x35d06040     0  55             push ebp
0x35d06041     1  89e5           mov ebp,esp
0x35d06043     3  6a02           push 0x2
......
0x35d060c2    82  c3             ret
Handler Table (size = 12)

RelocInfo (size = 23)
0x35d06047  external reference (Isolate::context_address)  (0xa9533dc)
0x35d06050  external reference (Isolate::c_entry_fp_address)  (0xa953410)
......
kind = STUB
major_key = JSEntryStub
compiler = unknown
Instructions (size = 131)
0x35d06120     0  55             push ebb
......

确实,我有一批代码,但它与输入脚本不同。 顺便说一下,对于一个简单的脚本,输出肯定太多了(大约13M文本)。

感谢。

1 个答案:

答案 0 :(得分:2)

对于当前的V8版本(5.9或更高版本),您可能需要--print-opt-code标志:最初,V8为其解释器生成字节代码(您可以使用--print-bytecode进行检查);一旦一个函数“热”(即花费大量时间执行它),它就会被发送到优化编译器为它生成机器代码。

请注意,您不能将V8用作通用的JavaScript到机器代码编译器。上面提到的标志用于调试;没有(支持或简单)方法从输出中生成工作二进制文件。