编辑:从 Hermes v0.5.0 开始,还有一个hermes-engine-cli
包含字节码反汇编程序的 NPM。它仅与相应的hermes-engine
版本兼容(即hermes-engine-cli@0.5.0
与兼容hermes-engine@0.5.0
)。
它仍然主要对编译器开发人员有用,而不是用于调试应用程序崩溃。
Hermes 工具不向后兼容,因此您需要先检查正确的版本。对于字节码版本62
,您可以v0.2.1
使用git checkout v0.2.1
. 对于任意字节码版本,git log -p include/hermes/BCGen/HBC/BytecodeFileFormat.h
将显示哪些提交将格式更新到了哪些版本。
构建后,您可以在提示符处使用hbcdump myfile.hbc
后跟disassemble
显示文件的禁用版本。
请注意,hbcdump
它旨在开发/调试编译器,与javap -c
和objdump -d
. 这是您可以期待的输出类型:
Function<fizzbuzz>1(1 params, 22 registers, 0 symbols):
Offset in debug table: src 0xd, vars 0x0
fizzbuzz.js[1:21]
LoadConstZero r11
LoadConstUInt8 r10, 15
LoadConstUInt8 r9, 3
LoadConstString r8, "Fizzbuzz"
LoadConstString r7, "Fizz"
LoadConstString r6, "Buzz"
GetGlobalObject r5
LoadConstUndefined r0
LoadConstUInt8 r4, 1
LoadConstUInt8 r3, 100
LoadConstUInt8 r2, 5
LoadConstZero r1
L2:
fizzbuzz.js[1:21]
Mod r12, r1, r10
Mov r13, r8
JStrictEqual L1, r12, r11
Mod r12, r1, r9
Mov r13, r7
JStrictEqual L1, r12, r11
Mod r12, r1, r2
Mov r13, r6
JStrictEqual L1, r12, r11
AddEmptyString r13, r1
L1:
fizzbuzz.js[8:5]
TryGetById r12, r5, 1, "print"
Call2 r12, r12, r0, r13
AddN r1, r1, r4
JLessN L2, r1, r3
Ret r0