| MAGIC(5) | File Formats Manual | 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)
حيث يُفسر
البايت/العدد
القصير/العدد
الصحيح
الأول على
أنه الطول
غير
الموقع.
يكون
الطول
بايت
مبدئياً
ويمكن
تحديده
كمعدل.
المعدلات
التالية
مدعومة:
السلسلة النصية لا تنتهي بمحرف NUL. يُستخدم الرمز “J” بدلاً من الرمز الأكثر قيمة “I” لأن هذا النوع من الطول يعد ميزة من ميزات صيغة JPEG.
- B
- طول بايت واحد (مبدئي).
- H
- طول من بايتين بترتيب البايتات الكبير (big endian).
- h
- طول من بايتين بترتيب البايتات الصغير (little endian).
- L
- طول من 4 بايتات بترتيب البايتات الكبير (big endian).
- l
- طول من 4 بايتات بترتيب البايتات الصغير (little endian).
- J
- يتضمن الطول نفسه في حسابه.
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 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org
| 24 نوفمبر 2025 | Nixpkgs |