如何在Chrome中查看JS生成的汇编代码及浏览器最终生成的x86机器码?
在Chrome浏览器中查看JavaScript生成的汇编/机器码方法
1. 如何查看JavaScript生成的汇编代码?
要在Chrome里看到JS代码对应的汇编指令,你需要开启DevTools的实验功能,具体步骤如下:
- 首先在Chrome地址栏输入
chrome://flags/#enable-devtools-experiments,开启「DevTools experiments」选项,然后重启Chrome生效。 - 打开开发者工具(按
F12或者右键页面选择「检查」),点击右上角的齿轮图标进入设置,在「Experiments」标签下勾选「Native code debugging」。 - 切换到「Sources」面板,找到你想要分析的JavaScript函数(比如示例里的
add函数),在函数定义处设置断点。 - 触发代码执行(比如调用
add(1,2)),当断点命中后,在右侧面板会出现「Disassemble」按钮,点击它就能看到V8生成的汇编代码了。
2. 是否可以查看最终生成的x86机器码?
完全可以!Chrome的V8引擎在JIT(即时编译)阶段会把热点JavaScript代码直接编译成x86(或对应架构)的机器码,上面的步骤就能看到最终的汇编指令(机器码对应的可读形式)。比如你给出的示例:
原始源码
function add(a, b){ return a + b; }
生成的x86汇编代码
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
这些就是V8为add函数生成的x86机器码对应的汇编指令,每一行的地址、偏移、指令都清晰可见,还包含了注释说明(比如判断是否为undefined的逻辑)。
内容的提问来源于stack exchange,提问作者Defarine
相关产品推荐
相关产品推荐

