نقل (الحوسبة)

في تطوير البرمجيات ، تُعرف عملية إعادة التوطين بأنها عملية تخصيص عناوين تحميل للتعليمات البرمجية والبيانات التي تعتمد على الموقع في البرنامج، وتعديل التعليمات البرمجية والبيانات لتعكس العناوين المخصصة. [ 1 ] [ 2 ]

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

تتم عملية إعادة التوطين عادةً بواسطة الرابط في وقت الربط ، ولكن يمكن أيضًا القيام بها في وقت التحميل بواسطة محمل إعادة التوطين ، أو في وقت التشغيل بواسطة البرنامج قيد التشغيل نفسه .

التجزئة

تُقسّم ملفات الكائنات عادةً إلى قطاعات ذاكرة مختلفة أو أنواع أقسام. تشمل أمثلة أنواع القطاعات : قطاع التعليمات البرمجية (.text) ، وقطاع البيانات المُهيأة (.data) ، وقطاع البيانات غير المُهيأة (.bss) ، أو غيرها مما يُحدده المبرمج، مثل القطاعات المشتركة أو القطاعات الثابتة المُسماة.

جدول النقل

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

في بعض البنى، يعتبر التعديل الذي يتجاوز حدودًا معينة (مثل حدود المقطع) أو الذي لا يتم محاذاته على حدود الكلمة غير قانوني ويتم الإبلاغ عنه كخطأ من قبل الرابط. [ 3 ]

نظام التشغيل DOS ونظام التشغيل ويندوز 16 بت

لا تحتوي المؤشرات البعيدة ( مؤشرات 32 بت مع مقطع :offset، تستخدم لمعالجة مساحة ذاكرة 20 بت 640 كيلوبايت متاحة لبرامج DOS )، والتي تشير إلى التعليمات البرمجية أو البيانات داخل ملف تنفيذي DOS ( EXE )، على مقاطع مطلقة، لأن العنوان الفعلي للتعليمات البرمجية أو البيانات يعتمد على مكان تحميل البرنامج في الذاكرة، وهذا غير معروف حتى يتم تحميل البرنامج. 

بدلاً من ذلك، تُعدّ المقاطع قيماً نسبية في ملف DOS EXE. يجب تصحيح هذه المقاطع عند تحميل الملف التنفيذي في الذاكرة. يستخدم مُحمّل ملفات EXE جدول إعادة التوطين للعثور على المقاطع التي تحتاج إلى تعديل.

ويندوز

مع أنظمة تشغيل ويندوز 32 بت، ليس من الضروري توفير جداول إعادة التوطين لملفات EXE، لأنها أول صورة يتم تحميلها في مساحة العنوان الظاهري وبالتالي سيتم تحميلها في عنوانها الأساسي المفضل.

بالنسبة لكل من ملفات DLL وملفات EXE التي تختار عشوائية تخطيط مساحة العناوين (ASLR)، وهي تقنية لتخفيف الاستغلال تم تقديمها مع نظام التشغيل Windows Vista ، تصبح جداول إعادة التوطين إلزامية مرة أخرى بسبب إمكانية نقل الملف الثنائي ديناميكيًا قبل تنفيذه، على الرغم من أنها لا تزال أول شيء يتم تحميله في مساحة العناوين الافتراضية.

يمكن وضع علامة "متوافق مع ASLR" على ملفات ويندوز التنفيذية. تتوفر هذه الميزة في ويندوز 8 والإصدارات الأحدث، حيث يمكن تفعيل ASLR حتى للتطبيقات غير المصنفة على أنها متوافقة. [ 4 ] ولضمان التشغيل الناجح في هذه البيئة، لا يمكن للمترجم حذف أقسام إعادة التوجيه.

أنظمة شبيهة بنظام يونكس

يُتيح تنسيق الملفات التنفيذية والمكتبات المشتركة (ELF)، المستخدم في معظم الأنظمة الشبيهة بنظام يونكس، تعريف أنواع متعددة من عمليات النقل. [ 5 ] : 1-22

على غرار الوضع في نظام ويندوز، يجب أن تكون المكتبات قابلة للنقل (أي تحتوي على كود مستقل عن الموقع وجداول مصاحبة)، بينما يمكن جعل الملفات التنفيذية قابلة للنقل اختيارياً لتقنية ASLR. تُعرف الملفات التنفيذية القابلة للنقل أيضاً بالملفات التنفيذية المستقلة عن الموقع .

إجراءات النقل

يقوم الرابط بقراءة معلومات القطاعات وجداول إعادة التوطين في ملفات الكائنات، وينفذ عملية إعادة التوطين عن طريق:

  • دمج جميع أجزاء النوع المشترك في جزء واحد من ذلك النوع
  • تخصيص عناوين وقت تشغيل غير متداخلة لكل مقطع ولكل رمز، وتخصيص عناوين وقت تشغيل فريدة لجميع التعليمات البرمجية (الدوال) والبيانات (المتغيرات العامة).
  • الرجوع إلى جدول إعادة التوطين لتعديل مراجع الرموز في البيانات ورمز الكائن بحيث تشير إلى عناوين وقت التشغيل المعينة.

مثال

يستخدم المثال التالي بنية MIX الخاصة بدونالد كنوث ولغة التجميع MIXAL. تبقى المبادئ نفسها لأي بنية، مع اختلاف التفاصيل.

  • (أ) يتم تجميع البرنامج SUBR لإنتاج ملف الكائن (ب)، الموضح بصيغتي لغة الآلة ولغة التجميع. قد يُحدد المُجمِّع بداية الكود المُجمَّع في موقع عشوائي، غالبًا الموقع 1، كما هو موضح. يحتوي الموقع 13 على كود الآلة لتعليمات القفز إلى العبارة ST في الموقع 5.
  • (ج) إذا تم ربط SUBR لاحقًا بشفرة أخرى، فقد يتم تخزينها في موقع آخر غير 1. في هذا المثال، يضعها الرابط في الموقع 120. يجب نقل العنوان الموجود في تعليمة القفز، والذي يوجد الآن في الموقع 133، ليشير إلى الموقع الجديد لشفرة العبارة ST ، والذي أصبح الآن 125. [1 61 الموضح في التعليمة هو تمثيل شفرة الآلة MIX للرقم 125].
  • (د) عند تحميل البرنامج في الذاكرة لتشغيله، قد يتم تحميله في موقع مختلف عن الموقع الذي حدده الرابط. يوضح هذا المثال أن SUBR موجود الآن في الموقع 300. يجب إعادة توجيه العنوان الموجود في تعليمة القفز، الموجود الآن في الموقع 313، بحيث يشير إلى الموقع المُحدَّث لـ ST ، وهو 305. [4 49 هو تمثيل آلة MIX للموقع 305].

البدائل

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

انظر أيضاً

مراجع

  1. "أنواع كود الكائن". دليل مرجعي لمحمل تطبيقات iRMX 86 ( ملف PDF) . إنتل . الصفحات  1-2-1-3 . مؤرشف (ملف PDF) من الأصل بتاريخ 11-01-2020 . تم الاسترجاع بتاريخ 11-01-2020 . [...] الكود المطلق ، ووحدة الكائن المطلقة، هو كود تمت معالجته بواسطة LOC86 ليتم تشغيله فقط في موقع محدد في الذاكرة. يقوم المحمل بتحميل وحدة الكائن المطلقة فقط في الموقع المحدد الذي يجب أن تشغله الوحدة. يختلف الكود المستقل عن الموقع (المشار إليه عادةً باسم PIC) عن الكود المطلق في أنه يمكن تحميل PIC في أي موقع ذاكرة. ميزة PIC على الكود المطلق هي أن PIC لا يتطلب منك حجز كتلة ذاكرة محددة. عندما يقوم المحمل بتحميل PIC، فإنه يحصل على مقاطع ذاكرة iRMX 86 من مجموعة مهام المهمة المستدعِية ويقوم بتحميل PIC في هذه المقاطع. من القيود المتعلقة بمعالج PIC، كما هو الحال في نموذج التجزئة PL/M-86 COMPACT، أنه لا يمكن أن يحتوي إلا على مقطع واحد للتعليمات البرمجية ومقطع واحد للبيانات، بدلاً من السماح لعناوين الأساس لهذه المقاطع، وبالتالي المقاطع نفسها، بالتغير ديناميكيًا. هذا يعني أن برامج PIC يجب ألا يتجاوز طولها 64 كيلوبايت. يمكن إنتاج كود PIC باستخدام أمر BIND في معالج LINK86. أما الكود القابل للتحديد وقت التحميل (المعروف باسم كود LTL) فهو الشكل الثالث من كود الكائن. يشبه كود LTL معالج PIC في إمكانية تحميله في أي مكان في الذاكرة. مع ذلك، عند تحميل كود LTL، يقوم المحمل بتغيير الجزء الأساسي من المؤشرات بحيث تصبح هذه المؤشرات مستقلة عن المحتويات الأولية للسجلات في المعالج الدقيق. بفضل هذا التعديل (ضبط عناوين الأساس)، يمكن استخدام كود LTL في المهام التي تحتوي على أكثر من مقطع واحد للتعليمات البرمجية أو أكثر من مقطع واحد للبيانات. هذا يعني أن برامج LTL قد يتجاوز طولها 64 كيلوبايت. تُنتج لغتا FORTRAN 86 و Pascal 86 تلقائيًا كود LTL، حتى للبرامج القصيرة. ويمكن إنتاج كود LTL باستخدام خاصية BIND في معالج LINK86. […]
  2. 1 2 ليفين، جون ر. (2000) [أكتوبر 1999]. "الفصل 1: الربط والتحميل والفصل 3: ملفات الكائنات". الروابط والمحملات . سلسلة مورغان كوفمان في هندسة البرمجيات والبرمجة ( الطبعة الأولى). سان فرانسيسكو، كاليفورنيا، الولايات المتحدة الأمريكية: مورغان كوفمان . ص 5. ISBN   1-55860-496-0. OCLC 42413382 . تم الاسترجاع في 12 يناير 2020 . {{cite book}}: CS1 maint: deprecated archiveal service ( link ) Code:تصحيحات:
  3. بورلاند (1999-09-01) [1998-07-02]. "مقالة بورلاند رقم 15961: التعامل مع رسائل 'Fixup Overflow'" . community.borland.com . قاعدة بيانات المعلومات التقنية - المنتج: Borland C++ 3.1. TI961C.txt #15961. مؤرشفة من الأصل بتاريخ 2008-07-07 . تم الاطلاع عليها بتاريخ 2007-01-15 .
  4. "ست حقائق حول عشوائية تخطيط مساحة العناوين في نظام ويندوز" . 17 مارس 2020. تم الاطلاع عليه بتاريخ 24 يوليو 2020 .
  5. "تنسيق قابل للتنفيذ والربط (ELF)" (ملف PDF) . skyfree.org . مواصفات تنسيقات واجهة الأدوات (TIS) المحمولة، الإصدار 1.1. مؤرشف من الأصل (ملف PDF) بتاريخ 24-12-2019 . تم الاطلاع عليه بتاريخ 01-10-2018 .

للمزيد من القراءة