因此,如果您的快照是由相當現代的版本製作的,那麼它可能不會[正確]。不過,如果您想嘗試,您可能至少需要#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目錄中還有其他信息。