- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 react-native 0.61.2 创建了我的应用程序的发布版本并启用了 Hermes。
在我的 Crashlytics 中,我收到有关崩溃的信息以及堆栈跟踪。以前我使用 apktool 从我的 apk 中提取 index.android.bundle,它包含 js 代码,我可以通过堆栈跟踪找到问题。
但是现在使用 Hermes index.android.bundle 似乎包含字节码而不是 js,我浪费了一天时间试图反汇编它。我尝试的最后一件事是 hbcdump https://github.com/facebook/hermes/blob/master/doc/BuildingAndRunning.md 中提到的工具,但我得到的只是“错误:无法反序列化字节码:错误的字节码版本。预期为 73,但得到了 62”
反汇编使用 Hermes 创建的 index.android.bundle 应该怎么做?非常感谢任何帮助!
最佳答案
编辑:从 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
关于android - 带有爱马仕反汇编 index.android.bundle 的 React-native 0.61.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490720/
我是一名优秀的程序员,十分优秀!