如何得到SpiderMonkey引擎的字节码(bytecode)
最简单的方法是用SpiderMonkey[4]自带的jsshell[1]工具。使用debug模式编译之后,通过“-D”参数就可以获得JavaScript脚本对应的bytecode了。示例(假设你编译的目录是build-debug):
1 2 |
cd mozilla-central/js/src ./build-debug/js -D tests/js1_8_5/shell.js |
得到的结果如下:
— SCRIPT tests/js1_8_5/shell.js:1 —
00000: 10 getgname “version”
{“interp”: 1}
00005: 10 typeof
{“interp”: 1}
00006: 10 string “undefined”
{“interp”: 1}
00011: 10 ne
{“interp”: 1}
00012: 10 ifeq 32 (+20)
{}
00017: 12 callgname “version”
{“interp”: 1}
00022: 12 undefined
{“interp”: 1}
00023: 12 notearg
{“interp”: 1}
00024: 12 uint16 185
{“interp”: 1}
00027: 12 notearg
{“interp”: 1}
00028: 12 call 1
{“interp”: 1}
00031: 12 pop
{“interp”: 1}
00032: 12 stop
{“interp”: 1}
— END SCRIPT tests/js1_8_5/shell.js:1 —
注意只有debug模式才会输出,release/optimize模式的jsshell会忽略该选项。
可以通过Mozilla的wiki学习如何下载[2]和编译[3]源代码。
[1]: Introduction_to_the_JavaScript_shell
[2]: Getting_SpiderMonkey_source_code
[3]: SpiderMonkey/Build_Documentation
[4]: JavaScript:New_to_SpiderMonkey
Recent Comments