قهوة
تنسيق ملف الكائن المشترك ( COFF ) هو تنسيق لملفات الحاسوب التنفيذية ، وملفات التعليمات البرمجية ، وملفات المكتبات المشتركة المستخدمة في أنظمة يونكس . تم تقديمه في نظام يونكس الخامس (Unix System V) ، ليحل محل تنسيق a.out المستخدم سابقًا ، وشكّل الأساس لمواصفات موسعة مثل XCOFF و ECOFF ، قبل أن يتم استبداله إلى حد كبير بتنسيق ELF ، الذي تم تقديمه مع نظام يونكس الرابع (SVR4) . لا يزال تنسيق COFF ومتغيراته مستخدمًا في بعض الأنظمة الشبيهة بيونكس ، وفي نظام مايكروسوفت ويندوز ( ملف تنفيذي محمول )، وفي بيئات UEFI ، وفي بعض أنظمة التطوير المدمجة.
تاريخ
لا يدعم تنسيق ملفات الكائنات الأصلي لنظام يونكس ( a.out) المكتبات المشتركة ، أو تحديد التنسيقات الخارجية، أو ربط العناوين بشكل صريح. ومع استمرار تطوير أنظمة شبيهة بنظام يونكس داخل شركة AT&T وخارجها ، ظهرت حلول مختلفة لهذه المشكلات وغيرها.
تم تقديم تنسيق COFF في عام 1983، في نظام UNIX System V الخاص بشركة AT&T لمنصات 32 بت غير VAX مثل 3B20 . وشملت التحسينات على تنسيق a.out الحالي لشركة AT&T أقسامًا اختيارية، وتصريحات صريحة للمعالج، وربط عناوين صريح.
مع ذلك، كان تصميم COFF محدودًا للغاية وغير مكتمل التحديد. فقد كانت هناك قيود على عدد الأقسام، وطول أسماء الأقسام، وعدد ملفات المصدر المضمنة. إضافةً إلى ذلك، لم تكن معلومات تصحيح الأخطاء الرمزية قادرة على دعم لغات البرمجة الشائعة مثل C ، ناهيك عن اللغات الأحدث مثل C++ وبنى مجموعات التعليمات الجديدة . ونتيجةً لذلك، كانت جميع تطبيقات COFF في العالم الحقيقي تُعدّ انتهاكًا للمعيار. وقد أدى هذا إلى ظهور العديد من امتدادات COFF. استخدمت IBM تنسيق XCOFF في نظام التشغيل AIX ؛ واستخدمت DEC و SGI وغيرهما تنسيق ECOFF ؛ كما ابتكرت العديد من منافذ SysV وسلاسل الأدوات التي تستهدف تطوير الأنظمة المدمجة نسخًا مختلفة غير متوافقة.
مع إصدار SVR4، استبدلت AT&T تنسيق COFF بتنسيق Executable and Linkable Format (ELF).
بينما لا تزال الإصدارات الموسعة من تنسيق COFF مستخدمة في بعض أنظمة يونكس والأنظمة الشبيهة بها، وخاصةً في الأنظمة المدمجة ، فإن الاستخدام الأكثر شيوعًا لتنسيق COFF اليوم هو في تنسيق الملفات التنفيذية المحمولة (PE) من مايكروسوفت . تم تطوير تنسيق PE (الذي يُكتب أحيانًا PE/COFF) لنظام ويندوز NT ، ويستخدم رأس COFF لملفات الكائنات ، وكجزء من رأس PE للملفات التنفيذية. [ 3 ]
سمات
كان التحسين الرئيسي الذي طرأ على ملف COFF مقارنةً بملف a.out هو إدخال أقسام متعددة مُسماة في ملف الكائن. يمكن أن تحتوي ملفات الكائنات المختلفة على أعداد وأنواع مختلفة من الأقسام.
معلومات تصحيح الأخطاء الرمزية
تتكون معلومات تصحيح الأخطاء الرمزية COFF من أسماء رمزية ( سلسلة نصية ) لوظائف البرنامج والمتغيرات، ومعلومات رقم السطر، المستخدمة لتعيين نقاط التوقف وتتبع التنفيذ.
تُخزَّن الأسماء الرمزية في جدول رموز COFF. يتضمن كل إدخال في جدول الرموز اسمًا، وفئة تخزين، ونوعًا، وقيمة، ورقم قسم. تُخزَّن الأسماء القصيرة (8 أحرف أو أقل) مباشرةً في جدول الرموز؛ أما الأسماء الأطول فتُخزَّن كإزاحة في جدول السلاسل النصية في نهاية كائن COFF.
تصف فئات التخزين نوع الكيان الذي يمثله الرمز، وقد تشمل متغيرات خارجية (C_EXT)، ومتغيرات تلقائية (مكدس) (C_AUTO)، ومتغيرات مسجلة (C_REG)، ودوال (C_FCN)، وغيرها الكثير. يصف نوع الرمز تفسير قيمة كيان الرمز، ويتضمن قيمًا لجميع أنواع بيانات لغة C.
عند تجميع ملف كائن COFF مع الخيارات المناسبة، سيحتوي على معلومات أرقام الأسطر لكل نقطة توقف محتملة في قسم النص من الملف. تتخذ معلومات أرقام الأسطر شكلين: في الشكل الأول، لكل نقطة توقف محتملة في الكود، يسجل مدخل جدول أرقام الأسطر العنوان ورقم السطر المطابق له. أما في الشكل الثاني، فيحدد المدخل مدخل جدول الرموز الذي يمثل بداية دالة، مما يتيح تعيين نقطة توقف باستخدام اسم الدالة.
لاحظ أن COFF لم يكن قادراً على تمثيل أرقام الأسطر أو رموز تصحيح الأخطاء للمصدر المضمن كما هو الحال مع ملفات الرأس، مما يجعل معلومات تصحيح الأخطاء في COFF عديمة الفائدة عملياً بدون ملحقات غير متوافقة.
عنوان افتراضي نسبي
عند إنشاء ملف COFF، لا يُعرف عادةً مكان تحميله في الذاكرة. يُسمى العنوان الظاهري الذي سيتم تحميل البايت الأول من الملف فيه بعنوان قاعدة الصورة . أما باقي الملف، فلا يتم تحميله بالضرورة في كتلة متصلة، بل في أقسام مختلفة .
لا ينبغي الخلط بين العناوين الظاهرية النسبية (RVAs) والعناوين الظاهرية القياسية. العنوان الظاهري النسبي هو العنوان الظاهري لكائن من الملف بعد تحميله في الذاكرة، مطروحًا منه عنوان قاعدة صورة الملف. إذا تم ربط الملف حرفيًا من القرص إلى الذاكرة، فسيكون العنوان الظاهري النسبي هو نفسه موضع الإزاحة في الملف، ولكن هذا نادر الحدوث.
لاحظ أن مصطلح RVA يُستخدم فقط مع الكائنات الموجودة في ملف الصورة. بمجرد تحميلها في الذاكرة، يُضاف عنوان قاعدة الصورة، وتُستخدم عناوين VA العادية.
مشاكل
يخزن رأس ملف COFF تاريخ ووقت إنشاء ملف الكائن كعدد صحيح ثنائي 32 بت، يمثل عدد الثواني منذ بداية حقبة يونكس ، 1 يناير 1970 00:00:00 بالتوقيت العالمي المنسق . وبالتالي، لا يمكن تخزين التواريخ التي تلي 19 يناير 2038 بهذا التنسيق ( مشكلة عام 2038 ). [ 4 ] : 11-4
انظر أيضاً
مراجع
- ↑ "مرجع المكتبة (دليل مبرمجي Visual C++ المضمن)" . msdn.microsoft.com . مؤرشف من الأصل بتاريخ 25-08-2003 . تم الاطلاع عليه بتاريخ 04-02-2021 .
- ↑ "بنية IMAGE_FILE_HEADER (winnt.h)" . 2018-05-12 . تم الاطلاع عليه بتاريخ 2023-12-22 .
- ↑ شركة مايكروسوفت 2006ب
- ↑ "11 تنسيق ملف الكائن الشائع (COFF)". دليل مبرمج نظام يونكس V/386 الإصدار 3.2، المجلد الثاني (PDF) . برنتيس هول . 1989. ISBN 0-13-944885-3.
للمزيد من القراءة
- مواصفات MIPS COFF
- جيرسيس، جينتاراس (1988)، فهم واستخدام COFF ، أورايلي وشركاؤه، ISBN 0-937175-31-5
- شركة مايكروسوفت (2006ب)، تنسيق ملف الكائن المشترك (COFF) (الإصدار 4.1 )، مؤرشف من الأصل بتاريخ 16-12-2006 ، تم استرجاعه بتاريخ 02-06-2007
- "نبذة تاريخية عن تنسيقات ملفات كائنات TI" . مؤرشف من الأصل بتاريخ 26-11-2023.
- "تنسيق ملف الكائن الشائع" (PDF) . شركة تكساس إنسترومنتس .
روابط خارجية
- نظرة معمقة على وثائق تنسيق ملفات Win32 القابلة للتنفيذ المحمولة وتنسيق PE في مايكروسوفت
- تنسيقات الملفات القابلة للتنفيذ
