Kse*_*nia 9 android disassembly android-bundle react-native react-native-hermes
我使用 react-native 0.61.2 创建了我的应用程序的发布版本并启用了 Hermes。在我的 Crashlytics 中,我收到有关崩溃的信息以及堆栈跟踪。以前我曾经应用 apktool 从我的 apk 中提取 index.android.bundle,它包含我能够通过堆栈跟踪找到问题的 js 代码。
但是现在使用 Hermes index.android.bundle 似乎包含字节码而不是 js,我浪费了一天试图反汇编它。我尝试的最后一件事是https://github.com/facebook/hermes/blob/master/doc/BuildingAndRunning.md 中提到的hbcdump工具,但我得到的只是“错误:无法反序列化字节码:错误的字节码版本。预期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 -cobjdump -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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1916 次 |
| 最近记录: |