FreeToGenerate.com

الصق بايتات protobuf وانظر كل قراءة تسمح بها الصيغة، بدل تخمين يُقدَّم لك جوابًا. لا يُرفع شيء.

ست عشري أو base64. وتُهمَل المسافات والنقطتان وبادئات 0x.

جرّب واحدًا

كل القراءات الصحيحة

6 بايت · 3 حقول · 3 ملتبسة

الحقل 1النوع 2 · محدَّد بالطول
على أنه حقل مكرر مرصوص8, 42, 16, 7
على أنه بايتات082a1007

على أنه رسالة متداخلةبالداخل

الحقل 1النوع 0 · varint
على أنه int32 أو int64 أو uint32 أو uint64 أو enum42
على أنه sint32 أو sint64 (زجزاج)21
الحقل 2النوع 0 · varint
على أنه int32 أو int64 أو uint32 أو uint64 أو enum7
على أنه sint32 أو sint64 (زجزاج)-4

حيث يحمل الحقل أكثر من قراءة، فكلها صحيحة. فالصيغة الثنائية لا تسجّل أيها المقصود، ولا يقول ذلك إلا ملف ‎.proto. فأي أداة تعرض هنا جوابًا واحدًا فقد خمّنت.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

فاكّ رموز protobuf

فُكّ بايتات Protocol Buffers بلا ملف ‎.proto، وانظر بالضبط أي أجزاء الرسالة يمكن استرجاعها وأيها لا.

ما الذي يُسترجَع وما الذي لا يُسترجَع

يرمّز Protocol Buffers الرسالة سلسلةَ حقول، لكل حقل ترويسة صغيرة تتبعها حمولة. والترويسة varint واحد يحمل رقم الحقل ونوعًا من ثلاث بتات، وكل حمولة إما محدِّدة لنفسها وإما مسبوقة بطولها. ويكفي ذلك للمرور على الرسالة كلها دون معرفة شيء عنها، ولهذا يعمل فكّ protobuf بلا ملف ‎.proto أصلًا.

وهو كذلك كل ما لديك. فأسماء الحقول لا تسير في الثنائي بأي صورة، فيسع الفاكَّ أن يقول لك إن الحقل 3 يحمل 1500، ولا يسعه أبدًا أن يقول إن اسمه timeout_ms. وليس ذلك قصورًا في هذه الأداة، بل الأسماء ببساطة ليست هناك، ولا تسترجعها حيلة.

وبعد ذلك أمران لا سبيل إلى البتّ فيهما البتة، وهما سبب عرض هذه الصفحة قراءاتٍ عدة للحقل الواحد. فالـvarint هو في آن واحد int32 وint64 وuint32 وuint64 وbool وenum صحيحة كلها، ولأن sint32 وsint64 يستعملان ترميز الزجزاج فالعدد نفسه يتغير: فالـvarint‏ 3 هو 3 بوصفه uint و−2 بوصفه sint. وفي الوقت نفسه قد يكون الحقل المحدَّد بالطول نصًّا أو بايتات خامًا أو رسالةً متداخلة أو حقلًا مكررًا مرصوصًا، ولا شيء في الترميز يفرّق بينها.

كيفية الاستخدام

  1. الصق البايتات. ست عشرية أو base64، بمسافات أو بغيرها، وبنقطتين أو ببادئات 0x. والبايتات المنسوخة كما هي من التقاط شبكي أو سطر سجل تعمل على حالها.
  2. امضِ في قائمة الحقول. يعرض كل حقل رقمه ونوعه وكل تأويل يسمح به الترميز. والرسائل المتداخلة تُفتح في مكانها.
  3. عُدّ تعدد القراءات التباسًا حقيقيًا. فحيث يحمل الحقل أكثر من قراءة، كلها صحيحة، ولا تسجّل الصيغة أيها المقصود. والعدّاد في الأعلى يقول كم حقلًا في هذا الموضع.

المثال الذي يُبدأ به

البايتات 0a 04 08 2a 10 07 هي الافتراضية في الصندوق أعلاه. تُقرأ الحقلَ 1 يحمل حمولةً من أربعة بايتات، وتلك الحمولة في آن واحد رسالةٌ متداخلة صحيحة تمامًا حقلها 1 يساوي 42 وحقلها 2 يساوي 7، وكتلةٌ معتمة من أربعة بايتات صحيحة تمامًا كذلك. والقراءتان صحيحتان، وليس في تلك البايتات الست ما يقول أيهما أراد المرسل.

وليست هذه حالة متكلَّفة، بل هي الحال المعتادة لأي حقل محدَّد بالطول، ولهذا فالفاكّ الذي يطبع جوابًا واحدًا إنما يعرض عليك تخمينه هو. فالنص الثنائي القصير يُقرأ رسالةً مصادفةً، والرسالة المتداخلة تُقرأ دائمًا بايتاتٍ أيضًا. ولا يحسم ذلك إلا المخطط، ولو كان المخطط عندك لما كنت هنا.

على أن الصيغة تقول لك شيئًا واحدًا بصوت عالٍ. فالنوعان 3 و4 كانا علامتي بدء المجموعة وانتهائها قديمًا، وقد هُجرا منذ سنين، والنوعان 6 و7 لم يُسندا قط. فإن حوت البايتات أحدها فهي إما قديمة جدًا وإما ليست protobuf، وهذه الصفحة تقول ذلك بدل أن تخرج لك هراءً معقولَ المظهر.

حدود صريحة، وكيف جرى التحقق

هذا يفكّ الصيغة الثنائية ولا شيء فوقها. فلن يخبرك بنوع الرسالة، ولا يستخرج أسماء الحقول، ولا يحاول حزر مخطط من أرقامها. ولا يفكّ كذلك أنواع الأغلفة المعروفة ولا Any، لأن كليهما يحتاج الواصفات ليعني شيئًا.

وحين تحتمل الحمولة أشياء عدة، تُقدَّم قراءة الرسالة المتداخلة أولًا إن نجحت، لأنها في حركة المرور الحقيقية هي الأغلب. وذلك الترتيب تيسير لا حكم، فقراءتا النص والبايتات معروضتان دائمًا إلى جانبها، والحمولات المكوّنة من محارف تحكّم لا تُعرض نصًّا وإن كانت UTF-8 صحيحة، لأن نصًّا مملوءًا بمحارف لا تُطبع ضجيجٌ في ثوب معلومة.

والتنفيذ مثبَّت على الأمثلة التي تنشرها وثائق الصيغة نفسها لا على توقعات مخترعة هنا: فالحقل 1 بوصفه varint‏ 150 هو 08 96 01، والحقل 2 يحمل النص testing، والمثال المرصوص فيه 3 و270 و86942، وجدول الزجزاج هو المنشور. وتجري المجموعة 577 تحققًا مع 17 ضابطًا سالبًا. وقد نجحت من أول مرة، وذلك بعينه أقل ما تستحق فيه مجموعةُ اختبارات ثقةً، فكسرُ المحرك عمدًا كشف عندها ثلاث ثغرات حقيقية: لم يكن أي تحقق يفحص قيمةً ثابتة العرض، فقراءتها بترتيب بايتات معكوس تمر دون أن يُنتبه لها؛ ولم يقع شيء بين عتبتي إعادة التأويل بإشارة؛ ولم تكن أي حمولة UTF-8 صحيحةً ومحارفَ تحكّم في آن، وهي الصورة الوحيدة التي تُشغّل فحص النص.

لماذا هي مجانية؟

هذا تحليل بايتات، ويجري في اللسان المفتوح عندك أصلًا. ولا يرى أي خادم بايتاتك، فلا شيء يُتقاضى ولا حساب يُنشأ.

وما تلصقه لا يُرفع ولا يُخزَّن ولا يُسجَّل. فأُطر protobuf الملتقطة تحوي عادةً معرّفات ورموزًا وبيانات شخصية، ويحسن قول ذلك صراحةً بدل تركه لظنك.