لذلك ، إذا تم إنتاج لقطةك من خلال إصدار حديث معقول ، فربما لن يتم تحليلها [بشكل صحيح]. ومع ذلك ، إذا كنت ترغب في المحاولة ، فربما تحتاج إلى الإصلاح على الأقل في #3.
darter هي وحدة Python يمكنها تحليل البيانات داخل لقطة DART (أي ملف libapp.so في تطبيق رفرفة الإصدار).
سمات:
app.so أو .snapshot تلقائيًا.أمثلة على ما يمكنك فعله بالمعلومات المحلية:
ملاحظة: ضع في اعتبارك أن هذا هو تحليل لقطات ثنائية (أي تعتمد على العمارة). .dill .snapshot darter [يتعلم أكثر]
معظم الكود هو الاعتماد الصفري ، باستثناء:
parse_elf_snapshot(...) يتطلب pyelftools
تتطلب وحدة darter.asm (لتحليل الكود المجمع) تتويجا (وربطها الثدي)
darter في حد ذاته هو مجرد وحدة ، ليس لديها برنامج مستقل أو CLI.
الطريقة الموصى بها لاستخدامها هي تضمينه في دفتر ملاحظات واللعب مع البيانات المحسورة.
قم بتثبيت Jupyter وافتح دفتر 1-introduction للحصول على تجول أساسي للبيانات المحسورة ؛ ثم توجه إلى 2-playground الذي يحتوي على أمثلة أكثر إثارة للاهتمام.
يوصى بشدة أن تلعب لأول مرة مع لقطة معروفة (أي أنك قمت ببناء نفسك أو لديك الرمز) ، قبل تحليل اللقطة التي أنت بعدها.
لا يزال المحلل في مرحلة مبكرة ولن يعمل في كل حالة.
تمت كتابة هذا المحلل بناءً على DART-SDK على 1ef83b86ae . تنسيق اللقطة داخلي لـ VM. يتفريغ بعض الكائنات كما تظهر في الذاكرة ؛ تحتاج إلى معرفة كيفية تجميع VM (ARCH ، Flags Flags) من أجل تحليله. يمكن أن يتغير بشكل متكرر بين الإصدارات ، حيث لا توجد مواصفات قياسية (AFAIK) للتنسيق.
أي مساعدة أو تبرعات مرحب بها.
بالنظر إلى قسم بيانات وقسم تعليمات (واختياريا قاعدة ):
OneByteString ، CodeSourceMap ، Instructions ، إلخ).يتم إرجاع المعلومات على أنها محلية قدر الإمكان ، بحيث يكون من السهل التلاعب بها. يتم تتبع المراجع الخلفية أيضًا ، بحيث يكون من السهل معرفة من أين يتم الرجوع إلى كائن معين.
يمكن darter تحليل كل من لقطات "VM" و "عزل" (تلك التي نهتم بها).
وحدة darter.asm تفصل الكود المترجم وتحليله. هذا أمر بالغ الأهمية بالنسبة لقطات AOT ، لأننا لا نحصل على رمز ثانوي رفيع المستوى.
إذا كنت جديدًا على هندسة Dart/Flutter العكسية ، فمن الجيد قراءة هذه المقدمة أولاً: https://mrale.ph/dartvm/
الكود ذي الصلة على التسلسل لقطة في runtime/vm/clustered_snapshot.cc و runtime/vm/raw_object.h .
هناك أيضًا معلومات إضافية في دليل info .