获取JavaScript字节码

Get JavaScript bytecode

本文关键字:字节 JavaScript 获取      更新时间:2023-09-26

我读到Javascript源代码首先编译成中间表示(字节码)。然后使用jit将字节码编译为本机代码。所以我在我的linux机器上编译webkit,并想获得源文件的字节码。但我不知道该怎么做?

我怎么能看到/访问javascript解释器产生的中间字节代码?

如果你使用Chrome或Node, JS引擎V8生成字节码。Safari也有类似的标志。

V8在2016年引入了一个字节码解释器Ignition。您可以使用——print-bytecode (Node 8.3及更新版本)打印字节码。

$ node --print-bytecode incrementX.js -e 'function incrementX(obj) {return 1 + obj.x;} incrementX({x: 42});`
...
[generating bytecode for function: incrementX]
Parameter count 2
Frame size 8
  12 E> 0x2ddf8802cf6e @    StackCheck
  19 S> 0x2ddf8802cf6f @    LdaSmi [1]
        0x2ddf8802cf71 @    Star r0
  34 E> 0x2ddf8802cf73 @    LdaNamedProperty a0, [0], [4]
  28 E> 0x2ddf8802cf77 @    Add r0, [6]
  36 S> 0x2ddf8802cf7a @    Return
Constant pool (size = 1)
0x2ddf8802cf21: [FixedArray] in OldSpace
 - map = 0x2ddfb2d02309 <Map(HOLEY_ELEMENTS)>
 - length: 1
           0: 0x2ddf8db91611 <String[1]: x>
Handler Table (size = 16)