MAGIC(5)

الاسم
magic - ملف الأنماط السحرية لأمر file

الوصف
توثق صفحة الدليل هذه تنسيق الملفات السحرية كما هي مستخدمة بواسطة الأمر file(1) ، الإصدار 5.47. يحدد الأمر file(1) نوع الملف باستخدام، من بين اختبارات أخرى، اختبارًا لمعرفة ما إذا كان الملف يحتوي على "أنماط سحرية" “magic patterns” معينة. تقع قاعدة بيانات هذه "الأنماط السحرية" عادةً في ملف ثنائي في /usr/share/misc/magic.mgc أو دليل لملفات مجزأة لنص المصدر للأنماط السحرية في /usr/share/misc/magic. تحدد قاعدة البيانات الأنماط التي سيُختبر وجودها، والرسالة أو نوع MIME المراد طباعته إذا عُثر على نمط معين، والمعلومات الإضافية المراد استخراجها من الملف.

تكون صيغة ملفات الأجزاء المصدرية المستخدمة لبناء قاعدة البيانات هذه كالتالي: يحدد كل سطر في ملف الأجزاء اختباراً يراد إجراؤه. يقارن الاختبار البيانات التي تبدأ عند إزاحة معينة في الملف بقيمة بايت، أو بسلسلة نصية، أو بقيمة رقمية. إذا نجح الاختبار، تُطبع رسالة. يتكون السطر من الحقول التالية:

offset
    رقم يحدد الإزاحة (بالبايت) داخل الملف للبيانات المراد اختبارها. يمكن أن تكون هذه الإزاحة رقماً سالباً إذا كانت:
    •   الإزاحة المباشرة الأولى للمدخل السحري (عند مستوى المتابعة 0)، وفي هذه الحالة تُفسر على أنها إزاحة من نهاية الملف باتجاه الخلف. يعمل هذا فقط عندما يكون موصّف الملف متاحاً وعندما يكون ملفاً عادياً.
    •   إزاحة متابعة نسبية لنهاية الحقل الأخير في المستوى الأعلى (&).
    إذا بدأت الإزاحة بالرمز “+” ، تُفسر جميع الإزاحات على أنها من بداية الملف (وهو الخيار المبدئي).

type
    نوع البيانات المراد اختبارها. القيم الممكنة هي:

    byte
        قيمة من بايت واحد.

    short
        قيمة من بايتين بترتيب البايتات الأصلي لهذا الجهاز.

    long
        قيمة من 4 بايتات بترتيب البايتات الأصلي لهذا الجهاز.

    quad
        قيمة من 8 بايتات بترتيب البايتات الأصلي لهذا الجهاز.

    float
        عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الأصلي لهذا الجهاز.

    double
        عدد ذو فاصلة عائمة مزدوج الدقة 64-بت وحسب معيار IEEE بترتيب البايتات الأصلي لهذا الجهاز.

    string
        سلسلة من البايتات. يمكن أن يُتبع تخصيص نوع السلسلة اختيارياً بخيار /<width> واختيارياً بمجموعة من الأعلام [bCcftTtWw]*. يمكن استخدام الشُرط المائلة للفصل بين الخيارات لتحسين القراءة. يحدّ العرض (width) من عدد المحارف المراد نسخها. الصفر يعني كل المحارف. الأعلام التالية مدعومة:
        b   فرض اختبار الملف الثنائي.
        C   استخدام مطابقة غير حساسة لحالة الأحرف الكبيرة: تطابق الأحرف الكبيرة في النمط السحري كلاً من الأحرف الصغيرة والكبيرة في الهدف، بينما تطابق الأحرف الصغيرة في النمط السحري الأحرف الكبيرة فقط في الهدف. (غير صالحة للتعبيرات النمطية regex)
        c   استخدام مطابقة غير حساسة لحالة الأحرف الصغيرة: تطابق الأحرف الصغيرة في النمط السحري كلاً من الأحرف الصغيرة والكبيرة في الهدف، بينما تطابق الأحرف الكبيرة في النمط السحري الأحرف الكبيرة فقط في الهدف. (غير صالحة للتعبيرات النمطية regex). لإجراء مطابقة غير حساسة لحالة الأحرف بالكامل، حدد كلاً من “c” و “C”.
        f   اشتراط أن تكون السلسلة المطابقة كلمة كاملة، وليس مطابقة جزئية للكلمة.
        s   عدم تضمين طول المطابقة في حساب الإزاحة. (صالح فقط للبحث والتعبيرات النمطية regex)
        T   تهذيب السلسلة النصية، أي تُحذف الفراغات البادئة والختامية قبل طباعة السلسلة.
        t   فرض اختبار الملف النصي.
        W   ضغط الفراغات في الهدف، والذي يجب أن يحتوي على محرف فراغ واحد على الأقل. (غير صالح للتعبيرات النمطية regex). إذا كان النمط السحري يحتوي على n من الفراغات المتتالية، يحتاج الهدف إلى n من الفراغات المتتالية على الأقل للمطابقة.
        w   معاملة كل فراغ في النمط السحري كفراغ اختياري. (غير صالح للتعبيرات النمطية regex)

    pstring
        سلسلة نصية بأسلوب باسكال (Pascal-style) حيث يُفسر البايت/العدد القصير/العدد الصحيح الأول على أنه الطول غير الموقع. يكون الطول بايت مبدئياً ويمكن تحديده كمعدل. المعدلات التالية مدعومة:
        B   طول بايت واحد (مبدئي).
        H   طول من بايتين بترتيب البايتات الكبير (big endian).
        h   طول من بايتين بترتيب البايتات الصغير (little endian).
        L   طول من 4 بايتات بترتيب البايتات الكبير (big endian).
        l   طول من 4 بايتات بترتيب البايتات الصغير (little endian).
        J   يتضمن الطول نفسه في حسابه.
        السلسلة النصية لا تنتهي بمحرف NUL. يُستخدم الرمز “J” بدلاً من الرمز الأكثر قيمة “I” لأن هذا النوع من الطول يعد ميزة من ميزات صيغة JPEG.

    date
        قيمة من 4 بايتات تُفسر كتاريخ يونكس.

    qdate
        قيمة من 8 بايتات تُفسر كتاريخ يونكس.

    ldate
        قيمة من 4 بايتات تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC).

    qldate
        قيمة من 8 بايتات تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC).

    qwdate
        قيمة من 8 بايتات تُفسر كتاريخ بأسلوب ويندوز.

    msdosdate
        قيمة من بايتين تُفسر كتاريخ بأسلوب FAT/DOS.

    msdostime
        قيمة من بايتين تُفسر كوقت بأسلوب FAT/DOS.

    beid3
        طول ID3 ‏32-بت بترتيب البايتات الكبير (big-endian).

    beshort
        قيمة من بايتين بترتيب البايتات الكبير (big-endian).

    belong
        قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian).

    bequad
        قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian).

    befloat
        عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الكبير (big-endian).

    bedouble
        عدد ذو فاصلة عائمة مزدوج الدقة 64-بت وحسب معيار IEEE بترتيب البايتات الكبير (big-endian).

    bedate
        قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ يونكس.

    beqdate
        قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ يونكس.

    beldate
        قيمة من 4 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC).

    beqldate
        قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب يونكس، ولكن بالتوقيت المحلي بدلاً من التوقيت العالمي المنسق (UTC).

    beqwdate
        قيمة من 8 بايتات بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب ويندوز.

    bemsdosdate
        قيمة من بايتين بترتيب البايتات الكبير (big-endian)، تُفسر كتاريخ بأسلوب FAT/DOS.

    bemsdostime
        قيمة من بايتين بترتيب البايتات الكبير (big-endian)، تُفسر كوقت بأسلوب FAT/DOS.

    bestring16
        سلسلة نصية يونيكود (UCS16) من بايتين بترتيب البايتات الكبير (big-endian).

    leid3
        طول ID3 ‏32-بت بترتيب البايتات الصغير (little-endian).

    leshort
        قيمة من بايتين بترتيب البايتات الصغير (little-endian).

    lelong
        قيمة من 4 بايتات بترتيب البايتات الصغير (little-endian).

    lequad
        قيمة من 8 بايتات بترتيب البايتات الصغير (little-endian).

    lefloat
        عدد ذو فاصلة عائمة أحادي الدقة 32-بت وحسب معيار IEEE بترتيب البايتات الصغير (little-endian).

    ledouble
        عدد بفاصلة عائمة بمعيار IEEE مزدوج الدقة وبسعة 64 بت بترتيب بايتات little-endian.

    ledate
        قيمة من أربعة بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ UNIX.

    leqdate
        قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ UNIX.

    leldate
        قيمة من أربعة بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC).

    leqldate
        قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC).

    leqwdate
        قيمة من ثمانية بايتات بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب Windows.

    lemsdosdate
        قيمة من بايتين بترتيب بايتات little-endian، تُفسَّر كتاريخ بأسلوب FAT/DOS.

    lemsdostime
        قيمة من بايتين بترتيب بايتات little-endian، تُفسَّر كتوقيت بأسلوب FAT/DOS.

    lestring16
        سلسلة نصية يونيكود (UCS16) من بايتين بترتيب بايتات little-endian.

    melong
        قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11).

    medate
        قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11)، تُفسَّر كتاريخ UNIX.

    meldate
        قيمة من أربعة بايتات بترتيب بايتات middle-endian (لـ PDP-11)، تُفسَّر كتاريخ بأسلوب UNIX، ولكن تُفسَّر كتوقيت محلي بدلاً من التوقيت العالمي المنسق (UTC).

    indirect
        بدءًا من الإزاحة المعطاة، استشر قاعدة بيانات magic مجددًا. إزاحة magic من نوع indirect تكون مبدئيًا مطلقة في الملف، ولكن يمكن تحديد /r للإشارة إلى أن الإزاحة نسبية من بداية المدخلة.

    name
        عرِّف مثيل magic “named” يمكن استدعاؤه من مدخلة magic أخرى من نوع use ، مثل استدعاء روتين فرعي. إزاحات magic المباشرة للمثيل المُسمَّى نسبية لإزاحة المدخلة السابقة المطابقة، لكن الإزاحات غير المباشرة نسبية لبداية الملف كالمعتاد. تُعيد مدخلات magic المُسمَّاة قيمة صحيحة إذا وجد تطابق في تقييم المدخلة، أو إذا وجد تطابق سابق.

    use استدعِ magic المُسمَّى بشكل تكراري بدءًا من الإزاحة الحالية. إذا بدأ اسم المرجع بـ ^ فإن ترتيب البايتات (endianness) لـ magic يُبدَّل؛ فإذا ذكر magic على سبيل المثال leshort ، فإنه يُعامَل كـ beshort والعكس صحيح. هذا مفيد لتجنب تكرار القواعد لاختلاف ترتيب البايتات.

    regex
        مطابقة تعبير نمطي ببناء التعبيرات النمطية الموسَّعة لـ POSIX (مثل egrep). التعبيرات النمطية قد تستغرق وقتًا أسيًا للمعالجة، وأداؤها يصعب التنبؤ به، لذا يُنصَح بعدم استخدامها. عند استخدامها في بيئات الإنتاج، يجب فحص أدائها بعناية. يجب أيضًا تحديد حجم السلسلة المطلوب البحث فيها عن طريق تحديد /<length> ، لتجنب مشاكل الأداء عند فحص الملفات الطويلة. يمكن أيضًا أن يتبع تحديد النوع اختياريًا /[c][s][l]. يجعل العلم “c” المطابقة غير حساسة لحالة الأحرف، بينما يُحدِّث العلم “s” الإزاحة إلى إزاحة بداية المطابقة، بدلاً من نهايتها. يغيِّر المعدِّل “l” حد الطول ليعني عدد الأسطر بدلاً من عدد البايتات. تُفصَل الأسطر بواسطة فاصل الأسطر الأصلي للمنصة. عند تحديد عدد الأسطر، يُحسَب عدد بايتات ضمني بافتراض أن كل سطر طوله 80 محرفًا. إذا لم يُحدَّد عدد البايتات أو الأسطر، يُقيَّد البحث آليًا بـ 8 كيلوبايت. يطابق ^ و $ بداية ونهاية الأسطر الفردية، على التوالي، وليس بداية ونهاية الملف.

    search
        بحث عن سلسلة نصية حرفية بدءًا من الإزاحة المعطاة. يمكن استخدام أعلام التعديل نفسها كما في أنماط السلاسل. يجب أن يحتوي تعبير البحث على النطاق بصيغة /number, وهو عدد المواضع التي ستُجرَى فيها محاولة المطابقة، بدءًا من إزاحة البداية. هذا مناسب للبحث عن تعبيرات ثنائية أكبر ذات إزاحات متغيرة، باستخدام رموز الهروب \ للمحارف الخاصة. ترتيب المعدِّل والرقم ليس مهمًا.

    default
        هذا مخصص للاستخدام مع الاختبار x (الذي هو صحيح دائمًا) وليس له نوع. يطابق عندما لا يكون أي اختبار آخر في مستوى التتابُع ذلك قد طابق من قبل. مسح الاختبارات المطابقة لمستوى تتابُع يمكن إجراؤه باستخدام الاختبار clear.

    clear
        هذا الاختبار صحيح دائمًا ويمسح علم المطابقة لمستوى التتابُع ذلك. وهو مخصص للاستخدام مع الاختبار default.

    der حلِّل الملف كملف شهادة DER. يُستخدم حقل الاختبار كنوع der يحتاج إلى مطابقة. أنواع DER هي: eoc ، bool ، int ، bit_str ، octet_str ، null ، obj_id ، obj_desc ، ext ، real ، enum ، embed ، utf8_str ، rel_oid ، time ، res2 ، seq ، set ، num_str ، prt_str ، t61_str ، vid_str ، ia5_str ، utc_time ، gen_time ، gr_str ، vis_str ، gen_str ، univ_str ، char_str ، bmp_str ، date ، tod ، datetime ، duration ، oid-iri ، rel-oid-iri. يمكن أن تتبع هذه الأنواع حجم عددي اختياري، والذي يشير إلى عرض الحقل بالبايتات.

    guid,

    leguid,

    beguid
        مُعرِّف فريد عالميًا (GUID)، يُحلّل ويُطبع كـ XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. تنسيقه عبارة عن سلسلة نصية.

    offset
        هذه قيمة رباعية تشير إلى الإزاحة الحالية للملف. يمكن استخدامها لتحديد حجم الملف أو ذاكرة السحر الوسيطة. على سبيل المثال، المُدخلات السحرية:

            -0	offset	x	this file is %lld bytes
            -0	offset	<=100	must be more than 100 \
                bytes and is only %lld

    octal
        سلسلة نصية تُمثّل رقمًا ثمانيًا.

    للتوافق مع معيار UNIX الموحد، فإن محددي النوع dC و d1 يكافئان byte ، ومحددي النوع uC و u1 يكافئان ubyte ، ومحددي النوع dS و d2 يكافئان short ، ومحددي النوع uS و u2 يكافئان ushort ، ومحددات النوع dI ، و dL ، و d4 تكافئ long ، ومحددات النوع uI ، و uL ، و u4 تكافئ ulong ، ومحدد النوع d8 يكافئ quad ، ومحدد النوع u8 يكافئ uquad ، ومحدد النوع s يكافئ string. بالإضافة إلى ذلك، فإن محدد النوع dQ يكافئ quad ومحدد النوع uQ يكافئ uquad.

    يُصنّف كل نمط سحري في المستوى الرئيس (انظر أدناه للحصول على تفسير للمستويات) كنص أو ثنائي وفقًا للأنواع المستخدمة. تُصنّف الأنواع “regex” و “search” كاختبارات نصية، ما لم تُستخدم محارف غير قابلة للطباعة في النمط. تُصنّف جميع الاختبارات الأخرى كثنائية. يُعتبر النمط في المستوى الرئيس نصًا اختباريًا عندما تكون جميع أنماطه الفرعية أنماطًا نصية؛ وخلاف ذلك، يُعتبر نمطًا ثنائيًا. عند مطابقة ملف، تُجرّب الأنماط الثنائية أولاً؛ وإذا لم يُعثر على تطابق، وبدا الملف كأنه نص، فيُحدّد ترميزه وتُجرّب الأنماط النصية.

    يمكن اختياريًا إتباع الأنواع الرقمية بمعامل وقيمة رقمية، لتحديد أن القيمة ستُعدّل وفقًا للمعامل والقيمة الرقمية قبل إجراء أي مقارنات. المعاملات التالية مدعومة: &, |,, +, -, *, /, %. إلحاق الحرف u كبادئة للنوع يشير إلى أن المقارنات المرتبة يجب أن تكون غير موقعة.

test
    القيمة المراد مقارنتها بالقيمة المأخوذة من الملف. إذا كان النوع رقميًا، فتُحدّد هذه القيمة بصيغة لغة C؛ وإذا كانت سلسلة نصية، فتُحدّد كسلسلة نصية بلغة C مع السماح بمحارف الهروب المعتادة (مثل \n للسطر الجديد).

    قد تُسبق القيم الرقمية بمحرف يشير إلى العملية المراد تنفيذها. يمكن أن يكون = ، لتحديد أن القيمة من الملف يجب أن تساوي القيمة المحددة، أو < ، لتحديد أن القيمة من الملف يجب أن تكون أقل من القيمة المحددة، أو > ، لتحديد أن القيمة من الملف يجب أن تكون أكبر من القيمة المحددة، أو & ، لتحديد أن القيمة من الملف يجب أن تحتوي على جميع البتات المعينة في القيمة المحددة، أو ^ ، لتحديد أن القيمة من الملف يجب أن تمسح أيًا من البتات المعينة في القيمة المحددة، أو ~ ، حيث تُنفي القيمة المحددة بعده قبل اختبارها. ويعني x أن أي قيمة ستتطابق. إذا حُذف المحرف، فيُفترض أنه =. العوامل & و ^ و ~ لا تعمل مع الأعداد العشرية والمضاعفة. يحدد العامل! أن السطر يتطابق إذا لَم ينجح الاختبار.

    تُحدّد القيم الرقمية بصيغة لغة C؛ على سبيل المثال: 13 عشري، و 013 ثماني، و 0x13 ست عشري.

    لا تُجرى العمليات الرقمية على أنواع التاريخ، وبدلاً من ذلك تُفسّر القيمة الرقمية كإزاحة.

    بالنسبة لقيم السلاسل النصية، يجب أن تتطابق السلسلة النصية من الملف مع السلسلة المحددة. يمكن تطبيق العوامل = و < و > (وليس &) على السلاسل النصية. الطول المستخدم للمطابقة هو طول معامل السلسلة النصية في الملف السحري. هذا يعني أن السطر يمكنه مطابقة أي سلسلة نصية غير فارغة (تُستخدم عادةً لطباعة السلسلة النصية لاحقًا)، باستخدام >\0 (لأن جميع السلاسل النصية غير الفارغة أكبر من السلسلة النصية الفارغة).

    تُعامل التواريخ كقيم رقمية في التمثيل الداخلي المقابل لها.

    ينتج عن الاختبار الخاص x دائمًا قيمة صحيحة (true).

message
    الرسالة المراد طباعتها في حال نجاح المقارنة. إذا كانت السلسلة النصية تحتوي على محدد تنسيق printf(3) ، فتُطبع القيمة من الملف (بعد تطبيق أي قناع محدد) باستخدام الرسالة كسلسلة تنسيق. إذا بدأت السلسلة بـ “\b” ، فإن الرسالة المطبوعة هي بقية السلسلة النصية دون إضافة مسافة بيضاء قبلها: عادةً ما تُفصل التطابقات المتعددة بمسافة واحدة.

يمكن تحديد منشئ ونوع APPLE المكون من 4+4 محارف كـ:

    !:apple	CREATYPE

يمكن تحديد قائمة بامتدادات الملفات الشائعة مفصولة بشرطة مائلة كـ:

    !:ext	ext[/ext...]

أي السلسلة النصية الحرفية “!:ext” متبوعة بقائمة مفصولة بشرطة مائلة من الامتدادات الشائعة؛ على سبيل المثال لصور JPEG:

    !:ext jpeg/jpg/jpe/jfif

يُعطى نوع MIME في سطر منفصل، ويجب أن يكون السطر التالي غير الفارغ وغير التعليقي بعد السطر السحري الذي يحدد نوع الملف، وله التنسيق التالي:

    !:mime	MIMETYPE

أي السلسلة النصية الحرفية “!:mime” متبوعة بنوع MIME.

يمكن تقديم قوة اختيارية في سطر منفصل يشير إلى الوصف السحري الحالي باستخدام التنسيق التالي:

    !:strength OP VALUE

يمكن أن يكون المعامل OP: + أو - أو * أو / وتكون VALUE ثابتاً بين 0 و 255. يُطبّق هذا الثابت باستخدام المعامل المحدد على القوة السحرية المبدئية المحسوبة حاليًا.

تحتوي بعض تنسيقات الملفات على معلومات إضافية تُطبع مع نوع الملف أو تحتاج إلى اختبارات إضافية لتحديد نوع الملف الحقيقي. تبدأ هذه الاختبارات الإضافية بمحرف واحد أو أكثر من محارف > التي تسبق الإزاحة. يشير عدد محارف > في السطر إلى مستوى الاختبار؛ ويُعتبر السطر الذي لا يحتوي على > في بدايته في المستوى 0. تُرتّب الاختبارات في تسلسل هرمي يشبه الشجرة: إذا نجح الاختبار في سطر عند المستوى n ، فتُنفّذ جميع الاختبارات التالية في المستوى n+1 ، وتُطبع الرسائل إذا نجحت الاختبارات، حتى يظهر سطر بمستوى n (أو أقل). بالنسبة للملفات الأكثر تعقيدًا، يمكن استخدام رسائل فارغة للحصول على تأثير "إذا/إذن" فقط، بالطريقة التالية:

    0      string    MZ
    >0x18  uleshort  <0x40   MS-DOS executable
    >0x18  uleshort  >0x3f   extended PC executable (e.g., MS Windows)

لا يلزم أن تكون الإزاحات ثابتة، بل يمكن أيضًا قراءتها من الملف الجاري فحصه. إذا كان المحرف الأول الذي يلي آخر > هو ( ، فتُفسّر السلسلة النصية التي تلي القوس كإزاحة غير مباشرة. هذا يعني أن الرقم الذي يلي القوس يُستخدم كإزاحة في الملف. تُقرأ القيمة عند تلك الإزاحة، وتُستخدم مرة أخرى كإزاحة في الملف. الإزاحات غير المباشرة تكون على الشكل: (x [[.,][bBcCeEfFgGhHiIlmosSqQ]][+-][ y ]). تُستخدم قيمة x كإزاحة في الملف. ويُقرأ بايت، أو طول id3، أو short أو long عند تلك الإزاحة اعتمادًا على محدد النوع [bBcCeEfFgGhHiIlLmsSqQ]. تُعامل القيمة كموقعة إذا حُدّد “”, أو غير موقعة إذا حُدّد “”.. تُفسّر الأنواع المكتوبة بحروف كبيرة الرقم كقيمة طرفية كبيرة (big endian)، بينما تُفسّر إصدارات الحروف الصغيرة الرقم كقيمة طرفية صغيرة (little endian)؛ ويُفسّر النوع m الرقم كقيمة طرفية وسيطة (PDP-11). تُضاف قيمة y إلى هذا الرقم وتُستخدم النتيجة كإزاحة في الملف. النوع المبدئي إذا لم يُحدّد هو long. الأنواع التالية مستكشفة:
Type | Sy Mnemonic | Sy Endian | Sy Size
bcBC | Byte/Char | N/A | 1
efg | Double | Little | 8
EFG | Double | Big | 8
hs | Half/Short | Little | 2
HS | Half/Short | Big | 2
i | ID3 | Little | 4
I | ID3 | Big | 4
l | Long | Little | 4
L | Long | Big | 4
m | Middle | Middle | 4
o | Octal | Textual | Variable
q | Quad | Little | 8
Q | Quad | Big | 8

وبهذه الطريقة يمكن فحص البنى ذات الطول المتغير:

    # MS Windows executables are also valid MS-DOS executables
    0           string   MZ
    >0x18       uleshort <0x40  MZ executable (MS-DOS)
    # skip the whole block below if it is not an extended executable
    >0x18       uleshort >0x3f
    >>(0x3c.l)  string   PE\0\0 PE executable (MS-Windows)
    >>(0x3c.l)  string   LX\0\0 LX executable (OS/2)

هذه الإستراتيجية في الفحص لها عيب: يجب عليك التأكد من طباعة شيء ما في النهاية، وإلا فقد يحصل المستخدمون على مخرجات فارغة (مثل عدم وجود PE\0\0 ولا LE\0\0 في المثال أعلاه).

إذا تعذر استخدام هذه الإزاحة غير المباشرة مباشرة، فمن الممكن إجراء حسابات بسيطة: يتيح إلحاق [+-*/%&|^]number داخل الأقواس تعديل القيمة المقروءة من الملف قبل استخدامها كإزاحة:

    # MS Windows executables are also valid MS-DOS executables
    0           string   MZ
    # sometimes, the value at 0x18 is less that 0x40 but there's still an
    # extended executable, simply appended to the file
    >0x18       uleshort <0x40
    >>(4.s*512) leshort  0x014c  COFF executable (MS-DOS, DJGPP)
    >>(4.s*512) leshort  !0x014c MZ executable (MS-DOS)

في بعض الأحيان لا تعرف الإزاحة الدقيقة لأن هذا يعتمد على طول أو موضع (عند استخدام الإزاحة غير المباشرة سابقًا) الحقول السابقة. يمكنك تحديد إزاحة نسبية لنهاية الحقل الأخير في المستوى الأعلى باستخدام ‘&’ كبادئة للإزاحة:

    0           string   MZ
    >0x18       uleshort >0x3f
    >>(0x3c.l)  string   PE\0\0    PE executable (MS-Windows)
    # immediately following the PE signature is the CPU type
    >>>&0       leshort  0x14c     for Intel 80386
    >>>&0       leshort  0x8664    for x86-64
    >>>&0       leshort  0x184     for DEC Alpha

يمكن الجمع بين الإزاحات غير المباشرة والنسبية:

    0             string   MZ
    >0x18         uleshort <0x40
    >>(4.s*512)   leshort  !0x014c MZ executable (MS-DOS)
    # if it's not COFF, go back 512 bytes and add the offset taken
    # from byte 2/3, which is yet another way of finding the start
    # of the extended executable
    >>>&(2.s-514) string   LE      LE executable (MS Windows VxD driver)

أو العكس بالعكس:

    0                 string   MZ
    >0x18             uleshort >0x3f
    >>(0x3c.l)        string   LE\0\0  LE executable (MS-Windows)
    # at offset 0x80 (-4, since relative offsets start at the end
    # of the up-level match) inside the LE header, we find the absolute
    # offset to the code area, where we look for a specific signature
    >>>(&0x7c.l+0x26) string   UPX     \b, UPX compressed

أو حتى كلاهما معًا!

    0                string   MZ
    >0x18            uleshort >0x3f
    >>(0x3c.l)       string   LE\0\0 LE executable (MS-Windows)
    # at offset 0x58 inside the LE header, we find the relative offset
    # to a data area where we look for a specific signature
    >>>&(&0x54.l-3)  string   UNACE  \b, ACE self-extracting archive

إذا كان عليك التعامل مع أزواج الإزاحة/الطول في ملفك، فحتى القيمة الثانية في تعبير بين قوسين يمكن أخذها من الملف نفسه، باستخدام مجموعة أخرى من الأقواس. لاحظ أن هذه الإزاحة غير المباشرة الإضافية تكون دائمًا نسبية لبداية الإزاحة غير المباشرة الرئيسة.

    0                 string       MZ
    >0x18             uleshort     >0x3f
    >>(0x3c.l)        string       PE\0\0 PE executable (MS-Windows)
    # search for the PE section called ".idata"...
    >>>&0xf4          search/0x140 .idata
    # ...and go to the end of it, calculated from start+length;
    # these are located 14 and 10 bytes after the section name
    >>>>(&0xe.l+(-4)) string       PK\3\4 \b, ZIP self-extracting archive

إذا كانت لديك قائمة بالقيم المعروفة عند مستوى متابعة معين، وتريد تقديم حالة مبدئية تشبه التبديل (switch-like default case):

    # clear that continuation level match
    >18	clear	x
    >18	lelong	1	one
    >18	lelong	2	two
    >18	default	x
    # print default match
    >>18	lelong	x	unmatched 0x%x

انظر أيضًا
file(1) - الأمر الذي يقرأ هذا الملف.

العلل
التنسيقات long و belong و lelong و melong و short و beshort و leshort لا تعتمد على طول أنواع بيانات C لـ short و long على المنصة، على الرغم من أن مواصفات UNIX الموحدة تلمح إلى أنها تعتمد عليها. ومع ذلك، نظراً لأن نظام OS X Mountain Lion قد اجتاز مجموعة اختبارات التحقق من مواصفات UNIX الموحدة، ويقدم إصداراً من file(1) لا تعتمد فيه هذه التنسيقات على أحجام أنواع بيانات C وهو مبني لبيئة 64 بت حيث يكون النوع long بحجم 8 بايت بدلاً من 4 بايت، فمن المحتمل أن مجموعة اختبارات التحقق لا تختبر ما إذا كان long ، على سبيل المثال، يشير إلى عنصر بنفس حجم نوع بيانات C لـ long. ربما ينبغي أن تكون هناك أسماء type مثل int8 و uint8 و int16 و uint16 و int32 و uint32 و int64 و uint64 ، ومتغيرات ترتيب البايت المحددة لها، لجعله أكثر وضوحاً أن تلك الأنواع لها أعراض محددة.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3: https://www.gnu.org/licenses/gpl-3.0.html أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.