因此,如果您的快照是由相当现代的版本制作的,那么它可能不会[正确]。不过,如果您想尝试,您可能至少需要#3中的修复程序。
darter是一个Python模块,可以将数据完全解析为DART快照(即libapp.so file flutter应用程序中的文件)。
特征:
app.so或.snapshot文件自动提取斑点。您可以使用解析信息来做什么的示例:
注意:请记住,这是用于解析二进制(IE架构依赖性)快照。 .dill文件和一些.snapshot文件包含内核AST,这是一种完全不同的格式,目前不受darter的支持。 [了解更多]
大多数代码是零依赖性的,除了:
parse_elf_snapshot(...)需要Pyelftools
darter.asm模块(用于分析组装代码)需要顶峰(及其Python绑定)
darter本身只是一个模块,它没有独立程序或CLI。
推荐使用它的方法是将其包括在笔记本中并播放解析的数据。
安装jupyter并打开1-introduction笔记本,以进行分析数据的基本演练;然后前往2-playground ,其中包含更多有趣的使用示例。
强烈建议您在分析所追求的快照之前,首次使用已知快照(即您已经构建了自己或拥有代码)。
解析器仍处于早期阶段,在每种情况下都不会工作。
该解析器是基于1ef83b86ae的Dart-SDK编写的。快照格式是VM的内部。它在记忆中出现时会倾倒一些对象。您需要知道如何编译VM(Arch,Compile Flags)以解析它。它可以在版本之间经常更改,因为该格式没有标准规格(AFAIK)。
欢迎任何帮助或捐款。
给定数据部分和指令部分(以及可选的基础):
OneByteString , CodeSourceMap , Instructions等)。该信息会尽可能地返回,因此很容易操纵。也会跟踪反向引用,因此很容易知道从何处引用某个对象。
darter可以解析“ VM”快照和“孤立”(我们关心的)。
darter.asm模块将编译的代码分解并进行分析。这对于AOT快照至关重要,因为我们没有高级字节码。
如果您不熟悉飞镖/扑面反向工程,最好先阅读此简介:https://mrale.ph/dartvm/
快照序列化上的相关代码是在runtime/vm/clustered_snapshot.cc和runtime/vm/raw_object.h 。
info目录中还有其他信息。