【问题标题】:How to convert Javascript code to human-readable opcodes or asm?如何将 Javascript 代码转换为人类可读的操作码或 asm?
【发布时间】:2020-02-02 09:43:02
【问题描述】:

据我所知,Javascript 代码可以生成 JS bytecode 或 asm 指令(如果内部 JIT 编译器能够将代码直接转换为机器指令)。

有没有办法将 Javascript 代码转换为人类可读的 JS 字节码(或 asm 指令)——取决于 V8 引擎如何转换它?

【问题讨论】:

    标签: javascript v8 spidermonkey


    【解决方案1】:

    您可以运行 d8 或带有--print-bytecode --print-opt-code 的节点,以便在生成字节码和优化的汇编代码时将其打印到标准输出。如果您只对函数foo 感兴趣,可以使用--print-bytecode-filter=foo 和--print-opt-code-filter=foo。您将需要一个调试版本,或者在其args.gn 中使用v8_enable_disassembler = true 的发布版本(常规版本版本不包含反汇编代码以节省二进制大小)。当函数“热”时,即运行了一段时间,将生成优化代码。

    【讨论】:

      【解决方案2】:

      您可以使用 npm 中的 bytenode 为您的节点应用程序创建可执行文件。如果你想阅读可执行文件,你可以使用 objdump、strace、radare2 等工具。您还可以在 vim 中打开可执行文件并使用选项 :%!xxd 以获得更人性化的视图。

      【讨论】:

      • 谢谢!你能详细说明如何使用:%!xxd 吗?打开二进制文件后就像在 vim 中一样?
      • 我不认为 bytenode 可以打包优化的代码。以这种方式创建的二进制文件将包含字节码,但像 objdump 这样的非 V8 特定工具可能不知道如何处理它。
      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2022-12-02
      相关资源
      最近更新 更多