如何查看我的JavaScript(在Chrome)生成的汇编代码?

How to view the assembly code generated from my JavaScript (in Chrome)?

是否有可能查看浏览器从我的 Javascript 生成的最终机器代码(x86 指令)?例如

--- Raw source ---
function add(a, b){
  return a + b;
}
...

--- Code ---
source_position = 0
kind = FUNCTION
Instructions (size = 456)
0x36953100     0  8b4c2404       mov ecx,[esp+0x4]
0x36953104     4  81f991806049   cmp ecx,0x49608091          ;; object: 0x49608091 <undefined>
0x3695310a    10  750a           jnz 22  (0x36953116)
0x3695310c    12  8b4e13         mov ecx,[esi+0x13]
0x3695310f    15  8b4917         mov ecx,[ecx+0x17]
0x36953112    18  894c2404       mov [esp+0x4],ecx
0x36953116    22  55             push ebp

谢谢!

您的脚本不会直接转换为机器代码。 JavaScript 在虚拟机 V8 上运行(对于 chrome 和经典的 nodejs 都是如此)你可以使用以下方法获取 VM 字节码:

node --print-bytecode script.js

然后V8执行优化字节码,调用外部C库和OSAPI(系统调用)或WEBAPI。即使 javascript 代码相同(例如优化前后),最终机器代码也可能不同。

您也可以从命令行启动 Chrome --js-flags="--print-bytecode"

UPD:

正如@PeterCordes 注意到的那样,nodejs 允许使用

查看Turbofan 生成的机器代码
node --print-opt-code script.js

Chrome:

--js-flags="--print-opt-code"

您也可以使用 HTML 可视化工具,例如 https://github.com/v8/v8/tree/master/tools/turbolizer