【发布时间】:2020-02-02 09:43:02
【问题描述】:
据我所知,Javascript 代码可以生成 JS bytecode 或 asm 指令(如果内部 JIT 编译器能够将代码直接转换为机器指令)。
有没有办法将 Javascript 代码转换为人类可读的 JS 字节码(或 asm 指令)——取决于 V8 引擎如何转换它?
【问题讨论】:
标签: javascript v8 spidermonkey
据我所知,Javascript 代码可以生成 JS bytecode 或 asm 指令(如果内部 JIT 编译器能够将代码直接转换为机器指令)。
有没有办法将 Javascript 代码转换为人类可读的 JS 字节码(或 asm 指令)——取决于 V8 引擎如何转换它?
【问题讨论】:
标签: javascript v8 spidermonkey
您可以运行 d8 或带有--print-bytecode --print-opt-code 的节点,以便在生成字节码和优化的汇编代码时将其打印到标准输出。如果您只对函数foo 感兴趣,可以使用--print-bytecode-filter=foo 和--print-opt-code-filter=foo。您将需要一个调试版本,或者在其args.gn 中使用v8_enable_disassembler = true 的发布版本(常规版本版本不包含反汇编代码以节省二进制大小)。当函数“热”时,即运行了一段时间,将生成优化代码。
【讨论】:
您可以使用 npm 中的 bytenode 为您的节点应用程序创建可执行文件。如果你想阅读可执行文件,你可以使用 objdump、strace、radare2 等工具。您还可以在 vim 中打开可执行文件并使用选项 :%!xxd 以获得更人性化的视图。
【讨论】:
:%!xxd 吗?打开二进制文件后就像在 vim 中一样?