رمز مستقل عن الموقع
في مجال الحوسبة ، يُعرف الكود المستقل عن الموقع [ 1 ] ( PIC [ 1 ] ) أو الملف التنفيذي المستقل عن الموقع ( PIE ) [ 2 ] بأنه جزء من كود الآلة الذي يُنفذ بشكل صحيح بغض النظر عن عنوان الذاكرة الخاص به . [ أ ] يُستخدم الكود المستقل عن الموقع (PIC) عادةً للمكتبات المشتركة ، بحيث يمكن تحميل نفس كود المكتبة في موقع ضمن مساحة عناوين كل برنامج، دون أن يتداخل مع ذاكرة أخرى مستخدمة، على سبيل المثال، بواسطة مكتبات مشتركة أخرى. كما استُخدم الكود المستقل عن الموقع (PIC) في أنظمة الحاسوب القديمة التي تفتقر إلى وحدة إدارة الذاكرة (MMU) [ 3 ] ، وذلك لتمكين نظام التشغيل من فصل التطبيقات عن بعضها البعض حتى ضمن مساحة العناوين الواحدة لنظام لا يحتوي على وحدة إدارة الذاكرة.
يمكن تنفيذ التعليمات البرمجية المستقلة عن الموقع في أي عنوان ذاكرة دون تعديل. وهذا يختلف عن التعليمات البرمجية المطلقة، [ 1 ] التي يجب تحميلها في موقع محدد لتعمل بشكل صحيح، [ 1 ] والتعليمات البرمجية القابلة للتحديد وقت التحميل (LTL)، [ 1 ] حيث يقوم الرابط أو مُحمِّل البرامج بتعديل البرنامج قبل التنفيذ، بحيث لا يمكن تشغيله إلا من موقع ذاكرة معين. [ 1 ] يُشار إلى المصطلحين الأخيرين أحيانًا باسم التعليمات البرمجية المعتمدة على الموقع . [ 4 ] غالبًا ما يكون توليد التعليمات البرمجية المستقلة عن الموقع هو السلوك الافتراضي للمترجمات ، ولكنها قد تفرض قيودًا على استخدام بعض ميزات اللغة، مثل منع استخدام العناوين المطلقة (يجب أن تستخدم التعليمات البرمجية المستقلة عن الموقع عناوين نسبية ). في بعض الأحيان، تُنفَّذ التعليمات التي تشير مباشرةً إلى عناوين ذاكرة محددة بشكل أسرع، وقد يؤدي استبدالها بتعليمات عناوين نسبية مكافئة إلى تنفيذ أبطأ قليلاً، على الرغم من أن المعالجات الحديثة تجعل الفرق ضئيلاً عمليًا. [ 5 ]
تاريخ
في الحواسيب المبكرة مثل IBM 701 [ 6 ] (29 أبريل 1952) أو UNIVAC I (31 مارس 1951)، لم يكن الكود مستقلاً عن الموقع: فقد صُمم كل برنامج ليتم تحميله وتشغيله من عنوان محدد. لم تكن تلك الحواسيب المبكرة مزودة بنظام تشغيل، ولم تكن قادرة على تعدد المهام. كانت البرامج تُحمّل في الذاكرة الرئيسية (أو حتى تُخزن على أسطوانة مغناطيسية للتنفيذ مباشرةً منها) وتُشغل برنامجًا تلو الآخر. في مثل هذا السياق التشغيلي، لم يكن الكود المستقل عن الموقع ضروريًا.
حتى في أنظمة القاعدة والحدود [ ب ] مثل CDC 6600 و GE 625 و UNIVAC 1107 ، بمجرد أن يقوم نظام التشغيل بتحميل التعليمات البرمجية في مساحة تخزين المهمة، لا يمكن تشغيلها إلا من العنوان النسبي الذي تم تحميلها فيه.
قدّم بوروز نظامًا مجزأً ، هو B5000 (1961)، حيث كانت البرامج تخاطب المقاطع بشكل غير مباشر عبر كلمات التحكم في المكدس أو في جدول مرجع البرنامج (PRT)؛ ويمكن مخاطبة مقطع مشترك عبر مواقع مختلفة في جدول مرجع البرنامج في عمليات مختلفة. وبالمثل، في نظام B6500 اللاحق ، كانت جميع مراجع المقاطع تتم عبر مواقع في إطار المكدس .
صُمم نظام IBM System/360 (7 أبريل 1964) بنظام عنونة مُقتطعة مشابه لنظام UNIVAC III ، [ 7 ] مع مراعاة استقلالية موضع التعليمات البرمجية. في نظام العنونة المُقتطعة، تُحسب عناوين الذاكرة من مُسجل أساسي وإزاحة. في بداية البرنامج، يجب على المُبرمج تحديد إمكانية العنونة بتحميل مُسجل أساسي؛ وعادةً ما يُعلم المُبرمج المُجمِّع باستخدام عملية USING الزائفة. يُمكن للمُبرمج تحميل المُسجل الأساسي من مُسجل معروف باحتوائه على عنوان نقطة الدخول، عادةً R15، أو يُمكنه استخدام تعليمة BALR (التفرع والربط، بصيغة المُسجل) (مع قيمة R2 تساوي 0) لتخزين عنوان التعليمات التسلسلية التالية في المُسجل الأساسي، والذي تم ترميزه صراحةً أو ضمنيًا في كل تعليمة تُشير إلى موقع تخزين داخل البرنامج. يُمكن استخدام مُسجلات أساسية مُتعددة، للتعليمات البرمجية أو للبيانات. تتطلب هذه التعليمات ذاكرة أقل لأنها لا تحتاج إلى الاحتفاظ بعنوان كامل مكون من 24 أو 31 أو 32 أو 64 بت (4 أو 8 بايت)، ولكن بدلاً من ذلك رقم سجل أساسي (مشفر في 4 بت) وإزاحة عنوان مكونة من 12 بت (مشفرة في 12 بت)، مما يتطلب بايتين فقط.
تُعدّ هذه التقنية البرمجية معيارية في أنظمة IBM S/360، وقد استُخدمت حتى نظام IBM System/z الحالي. عند البرمجة بلغة التجميع، يجب على المبرمج تحديد عناوين البرنامج كما هو موضح أعلاه، بالإضافة إلى استخدام سجلات أساسية أخرى للتخزين المُخصّص ديناميكيًا. تتولى المترجمات البرمجية هذه العملية تلقائيًا.
لم يكن نظام التشغيل المبكر لشركة IBM DOS/360 (1966) يستخدم التخزين الظاهري (لأن النماذج المبكرة من System S/360 لم تكن تدعمه)، ولكنه كان لديه القدرة على وضع البرامج في موقع تخزين عشوائي (أو يتم اختياره تلقائيًا) أثناء التحميل عبر عبارة PHASE name,* JCL (لغة التحكم في الوظائف) .
لذا، في أنظمة S/360 التي لا تحتوي على وحدة تخزين افتراضية، كان من الممكن تحميل البرنامج في أي موقع تخزين، ولكن هذا يتطلب مساحة ذاكرة متصلة كبيرة بما يكفي لاستيعاب ذلك البرنامج. وفي بعض الأحيان، كان يحدث تجزئة للذاكرة نتيجة تحميل وتفريغ وحدات ذات أحجام مختلفة. أما وحدة التخزين الافتراضية - بحكم تصميمها - فلا تعاني من هذا القيد.
بينما لم يدعم نظاما التشغيل DOS/360 و OS/360 وحدة التحكم PIC، فإن إجراءات SVC العابرة في نظام التشغيل OS/360 لا يمكن أن تحتوي على ثوابت عناوين قابلة لإعادة التوطين ويمكن تشغيلها في أي من المناطق العابرة دون إعادة توطين .
قدمت شركة IBM تقنية التخزين الافتراضي لأول مرة في نظام IBM System/360 طراز 67 عام 1965 لدعم نظام التشغيل متعدد المهام ونظام التشغيل TSS/360، وهو أول نظام تشغيل من IBM يدعم مشاركة الوقت. واستخدمت الإصدارات اللاحقة من DOS/360 (مثل DOS/VS) وأنظمة تشغيل IBM اللاحقة تقنية التخزين الافتراضي. وظلت تقنية العنونة المقتطعة جزءًا من البنية الأساسية، ولا تزال مفيدة عند تحميل وحدات متعددة في نفس مساحة العناوين الافتراضية.
على سبيل المقارنة، في الأنظمة المجزأة المبكرة مثل Burroughs MCP على Burroughs B5000 (1961) و Multics (1964)، وفي أنظمة الترحيل مثل IBM TSS/360 (1967)، كان رمز [ c ] مستقلاً عن الموضع بطبيعته، حيث كانت العناوين الافتراضية للبرامج الفرعية في البرنامج موجودة في بيانات خاصة خارجية عن الرمز، على سبيل المثال، جدول مرجع البرنامج، مقطع الربط، قسم النموذج الأولي.
أدى اختراع ترجمة العناوين الديناميكية (الوظيفة التي توفرها وحدة إدارة الذاكرة ) في الأصل إلى تقليل الحاجة إلى التعليمات البرمجية المستقلة عن الموقع، حيث أصبح لكل عملية نطاق عناوين مستقل خاص بها. مع ذلك، فإن تشغيل عدة عمليات متزامنة باستخدام نفس التعليمات البرمجية كان يُهدر الذاكرة الفعلية. في حال تشغيل عمليتين لبرنامجين متطابقين تمامًا، توفر ترجمة العناوين الديناميكية حلاً يتمثل في السماح للنظام ببساطة بربط عنواني العمليتين المختلفتين (32 كيلوبايت) بنفس بايتات الذاكرة الفعلية التي تحتوي على نسخة واحدة من البرنامج.
قد تشترك برامج مختلفة في شيفرة برمجية مشتركة. على سبيل المثال، قد يحتوي برنامج الرواتب وبرنامج حسابات القبض على روتين فرز متطابق. يتم تحميل وحدة مشتركة (المكتبة المشتركة هي شكل من أشكال الوحدات المشتركة) مرة واحدة وتُربط بمساحتي العناوين.
SunOS 4.x و ELF
تُجرى استدعاءات الإجراءات داخل المكتبة المشتركة عادةً عبر أجزاء صغيرة من جدول ربط الإجراءات (PLT) ، والتي بدورها تستدعي الدالة الأصلية. وهذا يسمح للمكتبة المشتركة بتوريث استدعاءات دوال معينة من المكتبات المحملة مسبقًا بدلاً من استخدام نسخها الخاصة. [ 8 ]
تُجرى عادةً مراجع البيانات من التعليمات البرمجية غير المعتمدة على الموقع بشكل غير مباشر، عبر جداول الإزاحة العامة (GOTs)، التي تخزن عناوين جميع المتغيرات العامة التي يتم الوصول إليها . يوجد جدول إزاحة عام واحد لكل وحدة تجميع أو وحدة كائن، ويقع عند إزاحة ثابتة من التعليمات البرمجية (مع أن هذه الإزاحة لا تُعرف إلا عند ربط المكتبة ). عندما يربط الرابط الوحدات لإنشاء مكتبة مشتركة، فإنه يدمج جداول الإزاحة العامة ويحدد الإزاحات النهائية في التعليمات البرمجية. ليس من الضروري تعديل الإزاحات عند تحميل المكتبة المشتركة لاحقًا. [ 8 ]
يقوم الكود المستقل عن الموقع، والذي يصل إلى البيانات العامة، بذلك عن طريق جلب عنوان المتغير العام من مدخله في جدول الإدراج العام (GOT). ولأن جدول الإدراج العام يقع عند إزاحة ثابتة من الكود، فإن الإزاحة بين عنوان تعليمة معينة في الكود وعنوان مدخل جدول الإدراج العام لمتغير عام معين تكون ثابتة أيضًا، بحيث لا يلزم تغيير الإزاحة تبعًا للعنوان الذي يتم تحميل الكود المستقل عن الموقع عنده. تستخدم التعليمة التي تجلب مدخل جدول الإدراج العام لمتغير عام نمط عنونة يحتوي على إزاحة نسبية إلى تعليمة معينة في الكود؛ قد يكون هذا نمط عنونة نسبي إلى عداد البرنامج (PC) إذا كانت بنية مجموعة التعليمات تدعمه، أو نمط عنونة نسبي إلى المسجل ، حيث تقوم الدوال بتحميل هذا المسجل بعنوان تعليمة في مقدمة الدالة . [ 8 ] [ 9 ] [ 10 ] [ 11 ]
ملفات DLL الخاصة بنظام التشغيل Windows
تستخدم مكتبات الارتباط الديناميكي (DLLs) في نظام التشغيل مايكروسوفت ويندوز النسخة E8 من تعليمة CALL (استدعاء قريب، نسبي، إزاحة نسبية للتعليمة التالية). لا تحتاج هذه التعليمات إلى تعديل عند تحميل مكتبة الارتباط الديناميكي.
من المتوقع أن تحتوي بعض المتغيرات العامة (مثل مصفوفات السلاسل النصية، وجداول الدوال الافتراضية) على عنوان كائن في قسم البيانات أو قسم التعليمات البرمجية للمكتبة الديناميكية؛ لذا، يجب تحديث العنوان المخزن في المتغير العام ليعكس العنوان الذي تم تحميل المكتبة الديناميكية إليه. يقوم مُحمِّل المكتبة الديناميكية بحساب العنوان المشار إليه بواسطة متغير عام وتخزين قيمته فيه؛ مما يؤدي إلى نسخ صفحة الذاكرة التي تحتوي على هذا المتغير عند الكتابة. تبقى الصفحات التي تحتوي على التعليمات البرمجية والصفحات التي تحتوي على متغيرات عامة لا تتضمن مؤشرات إلى التعليمات البرمجية أو البيانات العامة مشتركة بين العمليات. يجب تنفيذ هذه العملية في أي نظام تشغيل قادر على تحميل مكتبة ديناميكية من أي عنوان.
في نظام التشغيل ويندوز فيستا والإصدارات اللاحقة، يتولى مدير ذاكرة النواة عملية نقل ملفات DLL والملفات التنفيذية، حيث يقوم بتوزيع الملفات الثنائية المنقولة على عدة عمليات. ويتم نقل الصور دائمًا من عناوينها الأساسية المفضلة، مما يحقق عشوائية تخطيط مساحة العناوين (ASLR). [ 12 ]
تتطلب إصدارات ويندوز السابقة لإصدار فيستا ربط مكتبات الارتباط الديناميكي (DLL) الخاصة بالنظام مسبقًا بعناوين ثابتة غير متعارضة أثناء عملية الربط لتجنب إعادة توجيه الصور أثناء التشغيل. في هذه الإصدارات القديمة من ويندوز، تتم إعادة التوجيه بواسطة مُحمِّل مكتبات الارتباط الديناميكي ضمن سياق كل عملية، وبالتالي لا يمكن مشاركة الأجزاء المُعاد توجيهها من كل صورة بين العمليات.
تختلف طريقة معالجة ملفات DLL في نظام ويندوز عن طريقة نظام التشغيل OS/2 السابقة . يقدم نظام OS/2 خيارًا ثالثًا، حيث يحاول تحميل ملفات DLL غير المستقلة عن الموقع في "مساحة مشتركة" مخصصة في الذاكرة، ثم يقوم بربطها بعد تحميلها. وبذلك، يتمكن جميع مستخدمي ملف DLL من استخدام النسخة نفسها الموجودة في الذاكرة.
Multics
في لغة Multics، يتكون كل إجراء من الناحية النظرية من مقطع برمجي ومقطع ربط. [ 13 ] [ 14 ] يحتوي المقطع البرمجي على التعليمات البرمجية فقط، بينما يعمل مقطع الربط كقالب لمقطع ربط جديد. يشير سجل المؤشر 4 (PR4) إلى مقطع الربط الخاص بالإجراء. عند استدعاء إجراء ما، يتم حفظ PR4 في المكدس قبل تحميله بمؤشر إلى مقطع الربط الخاص بالإجراء المستدعى. يستخدم استدعاء الإجراء زوجًا من المؤشرات غير المباشرة [ 15 ] مع علامة لإحداث خطأ في الاستدعاء الأول، مما يسمح لآلية الربط الديناميكية بإضافة الإجراء الجديد ومقطع الربط الخاص به إلى جدول المقاطع المعروفة (KST)، وإنشاء مقطع ربط جديد، ووضع أرقام مقاطعهما في مقطع الربط الخاص بالإجراء المستدعي، وإعادة ضبط العلامة في زوج المؤشرات غير المباشرة.
نظام TSS
في نظام IBM S/360 لمشاركة الوقت (TSS/360 وTSS/370)، قد يحتوي كل إجراء على قسم نموذج أولي عام للقراءة فقط (CSECT) وقسم نموذج أولي خاص قابل للكتابة (PSECT). يقوم المستدعي بتحميل قيمة ثابتة (V) للروتين في السجل العام 15 (GR15) وينسخ قيمة ثابتة (R) لقسم النموذج الأولي الخاص بالروتين إلى الكلمة التاسعة عشرة من منطقة الحفظ المشار إليها في السجل العام 13 (GR13). [ 16 ]
لا يقوم المحمل الديناميكي [ 17 ] بتحميل صفحات البرنامج أو حل ثوابت العنوان حتى حدوث خطأ الصفحة الأول.
ملفات تنفيذية مستقلة عن الموقع
الملفات التنفيذية المستقلة عن الموقع (PIE) هي ملفات تنفيذية ثنائية مصنوعة بالكامل من شفرة مستقلة عن الموقع. بينما لا تشغل بعض الأنظمة إلا ملفات PIC التنفيذية، إلا أن هناك أسبابًا أخرى لاستخدامها. تُستخدم ملفات PIE الثنائية في بعض توزيعات لينكس التي تركز على الأمان للسماح لـ PaX أو Exec Shield باستخدام عشوائية تخطيط مساحة العناوين (ASLR) لمنع المهاجمين من معرفة مكان الشفرة التنفيذية الموجودة أثناء هجوم أمني باستخدام ثغرات تعتمد على معرفة إزاحة الشفرة التنفيذية في الملف الثنائي، مثل هجمات العودة إلى مكتبة libc . (تحتوي نواة لينكس الرسمية منذ الإصدار 2.6.12 لعام 2005 على ASLR أضعف يعمل أيضًا مع PIE. تكمن نقطة ضعفه في تطبيق العشوائية على وحدات ملف ELF بأكملها.) [ 18 ]
يدعم نظاما التشغيل macOS و iOS من Apple ملفات PIE التنفيذية بشكل كامل بدءًا من الإصدارين 10.7 و4.3 على التوالي؛ ويصدر تحذير عند تقديم ملفات iOS التنفيذية غير المتوافقة مع PIE للموافقة عليها في متجر تطبيقات Apple، ولكن لا يوجد شرط إلزامي حتى الآن، ولا يتم رفض التطبيقات غير المتوافقة مع PIE. [ 19 ] [ 20 ]
يُفعّل نظام OpenBSD ميزة PIE افتراضيًا على معظم البنى منذ إصدار OpenBSD 5.3، الذي صدر في 1 مايو 2013. [ 21 ] أُضيف دعم PIE في الملفات الثنائية المرتبطة بشكل ثابت ، مثل الملفات التنفيذية في /binالمجلدات /sbin، قرب نهاية عام 2014. [ 22 ] أضافت openSUSE ميزة PIE افتراضيًا في فبراير 2015. بدءًا من Fedora 23، قرر مطورو Fedora بناء الحزم مع تفعيل PIE افتراضيًا. [ 23 ] يُفعّل نظام Ubuntu 17.10 ميزة PIE افتراضيًا على جميع البنى. [ 24 ] تدعم ملفات تعريف Gentoo الجديدة الآن ميزة PIE افتراضيًا. [ 25 ] في يوليو 2017 تقريبًا، فعّلت Debian ميزة PIE افتراضيًا. [ 26 ]
قام نظام Android بتمكين دعم PIEs في جيلي بين [ 27 ] وأزال دعم الروابط غير PIE في لولي بوب . [ 28 ]
انظر أيضاً
ملحوظات
- ↑ يسمح هذا لكل عملية تستخدم نسخة مشتركة برؤيتها في عنوان افتراضي مختلف.
- ↑ ولكن تم تحميل نسخة منفصلة من الكود لكل مهمة.
- ↑ على الرغم من أن نظام TSS/360 كان يدعم وحدة التحكم في النداء المشتركة، إلا أن ذلك لم يكن صحيحًا بالنسبة لجميع أنظمة النداء.
- ↑ هناك بعض الانحرافات التقنية لأسباب تتعلق بالأداء والتي تتجاوز نطاق هذه المقالة.
مراجع
- ١ ٢ ٣ ٤ ٥ ٦ " أنواع كود الكائنات". دليل مرجعي لمحمل تطبيقات iRMX 86 (ملف PDF) . إنتل . الصفحات ١-٢ ، ١-٣ . مؤرشف (ملف PDF) من الأصل بتاريخ ١١ يناير ٢٠٢٠. تم الاطلاع عليه بتاريخ ٢١ أغسطس ٢٠١٧.
[...] الكود المطلق ، ووحدة الكائن المطلقة، هو كود تمت معالجته بواسطة 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. […]
- ↑ "الملفات التنفيذية المستقلة عن الموقع (PIE)" . www.redhat.com . مؤرشف من الأصل بتاريخ 2026-05-02 . تم الاطلاع عليه بتاريخ 2026-05-30 .
- ↑ ليفين، جون ر. (2000) [أكتوبر 1999]. "الفصل 8: التحميل والتراكبات". الروابط والمحملات . سلسلة مورغان كوفمان في هندسة البرمجيات والبرمجة ( الطبعة الأولى). سان فرانسيسكو، الولايات المتحدة الأمريكية: مورغان كوفمان . الصفحات 170-171 . ISBN 1-55860-496-0OCLC 42413382 . ISBN 978-1-55860-496-4تم الاطلاع عليه بتاريخ 12 يناير 2020 .
{{cite book}}: CS1 maint: deprecated archiveal service ( link ) Code:تصحيحات: - ↑ "كود مستقل عن الموقع" . أوراكل . مؤرشف من الأصل بتاريخ 19-04-2025 . تم الاسترجاع بتاريخ 29-01-2025 .
عادةً ما يكون الكود الموجود داخل ملف تنفيذي ديناميكي معتمدًا على الموقع، ويرتبط بعنوان ثابت في الذاكرة.
- ↑ جابرت، ألكسندر (يناير 2004). " التفاصيل الداخلية للرمز المستقل عن الموقع" . جنتو المحسّن . مؤرشف من الأصل في 25 نوفمبر 2009. تم الاسترجاع في 3 ديسمبر 2009.
[...] العنونة المباشرة غير المدركة لرمز الموقع المستقل (PIC) أرخص دائمًا (أي أسرع) من عنونة PIC. [...]
- ↑ "الإعلان عن 701" ، شركة آي بي إم ، 29 أبريل 1952، مؤرشف من الأصل في 4 يناير 2019 ، تم الاطلاع عليه في 4 مارس 2019
- ↑ دليل مرجعي لنظام معالجة البيانات UNIVAC III (ملف PDF) . شركة سبيري راند . 1962. UT-2488. مؤرشف (ملف PDF) من الأصل بتاريخ 30 نوفمبر 2020. تم الاطلاع عليه بتاريخ 17 أغسطس 2020 .
- 1 2 3 جينجيل، روبرت أ.؛ لي، مينغ؛ دانغ، زونغ ت.؛ ويكس، ماري س. المكتبات المشتركة في نظام التشغيل SunOS (ملف PDF) . مؤتمر ومعرض USENIX التقني الصيفي لعام 1987. الصفحات 131-146 . مؤرشف (ملف PDF) من الأصل بتاريخ 10 يناير 2026. تم الاطلاع عليه بتاريخ 23 يونيو 2024 .
- ↑ واجهة التطبيق الثنائية لنظام System V، ملحق عائلة معالجات موتورولا 68000 (ملف PDF) . برنتيس هول. 1990. الصفحات 3-32 – 3-35 . ISBN 0-13-877663-6تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 17 مارس 2025. تم الاطلاع عليه بتاريخ 27 مارس 2025 .
- ↑ ملحق معالج بنية i386 لواجهة التطبيقات الثنائية لنظام System V (ملف PDF) (الطبعة الرابعة ). الصفحات 3-35 – 3-39 . مؤرشف (ملف PDF) من الأصل بتاريخ 25-03-2025 . تم الاطلاع عليه بتاريخ 27-03-2025 .
- ↑ ملحق معالج بنية AMD64 لواجهة التطبيقات الثنائية لنظام System V (مع نماذج برمجة LP64 وILP32) الإصدار 1.0 (ملف PDF) . 28-09-2021. مؤرشف (ملف PDF) من الأصل بتاريخ 11-04-2025 . تم الاطلاع عليه بتاريخ 27-03-2025 .
- ↑ "تطورات في إدارة الذاكرة لنظام ويندوز" . View.officeapps.live.com . مؤرشف من الأصل بتاريخ 14 أبريل 2021. تم الاطلاع عليه بتاريخ 23 يونيو 2017 .
- ↑ أورغانيك، إليوت إيرفينغ (1972). نظام مولتيكس: دراسة لبنيته . مطبعة معهد ماساتشوستس للتكنولوجيا . ISBN 9780262150125. إل سي سي إن 78157477 .
- ↑ دالي، روبرت سي؛ دينيس، جاك بي (مايو 1968). "الذاكرة الافتراضية، والعمليات، والمشاركة في Multics" . مجلة اتصالات رابطة آلات الحوسبة . 11 (5). رابطة آلات الحوسبة : 306-312 . doi : 10.1145/363095.363139 . تاريخ الاسترجاع: 21 يوليو 2024 .
- ↑ "القسم 6: تكوين العناوين الافتراضية"، دليل معالج DPS/LEVEL 68 وDPS 8M متعدد القنوات (ملف PDF) (الطبعة الأولى المنقحة )، شركة هانيويل لأنظمة المعلومات ، 1982، الصفحات 6-21 ، AL39، مؤرشف (ملف PDF) من النسخة الأصلية بتاريخ 26-03-2023 ، تم استرجاعه بتاريخ 25-03-2023
- ↑ "القسم 3: نظام المشاركة الزمنية لمبرمج Svslcm". مفاهيم ومرافق نظام المشاركة الزمنية من IBM (ملف PDF) (الطبعة السابعة ). أبريل 1978. صفحة 61. GC28-2003-6. مؤرشف (ملف PDF) من الأصل بتاريخ 2019-12-02 . تم الاطلاع عليه بتاريخ 2019-07-21 .
- ↑ مُحمِّل النظام الديناميكي لنظام مشاركة الوقت IBM System/360 (ملف PDF) (الطبعة الرابعة ). سبتمبر 1971. GY28-2031-3. مؤرشف (ملف PDF) من الأصل بتاريخ 29 مايو 2019. تم الاطلاع عليه بتاريخ 21 يوليو 2019 .
- ↑ ليتيري، ج. "عشوائية تخطيط مساحة العناوين" (ملف PDF) . مؤرشف (ملف PDF) من الأصل بتاريخ 31-03-2023 . تم الاطلاع عليه بتاريخ 03-03-2023 .
- ↑ "iphone - Non-PIE Binary - The executable 'project name' is not a Position Independent Executable. - Stack Overflow" . stackoverflow.com . مؤرشف من الأصل بتاريخ 2025-12-04 . تم الاطلاع عليه بتاريخ 2016-07-25 .
- ↑ "مكتبة مطوري iOS" . apple.com . مؤرشف من الأصل بتاريخ 2010-09-08 . تم الاطلاع عليه بتاريخ 2013-08-07 .
- ↑ "إصدار OpenBSD 5.3" . 1 مايو 2013. مؤرشف من الأصل بتاريخ 24 أكتوبر 2018. تم الاطلاع عليه بتاريخ 9 مايو 2020 .
- ↑ "تنبيه: ترقيات اللقطات لـ Static PIE" . 24-12-2014. مؤرشف من الأصل في 25-12-2014 . تم الاسترجاع في 24-12-2014 .
- ↑ "تغييرات/تحسين أمان جميع الحزم - مشروع فيدورا" . fedoraproject.org . مؤرشف من الأصل بتاريخ 28-06-2017 . تم الاطلاع عليه بتاريخ 04-10-2015 .
- ↑ "فريق مؤسسة أوبونتو - النشرة الإخبارية الأسبوعية، 15 يونيو 2017" . 15 يونيو 2017. تم الاطلاع عليه بتاريخ 17 يونيو 2017 .
- ↑ "ملفات تعريف جديدة للإصدار 17.0 في مستودع Gentoo" . 30 نوفمبر 2017. مؤرشف من الأصل بتاريخ 10 ديسمبر 2017. تم الاطلاع عليه بتاريخ 10 ديسمبر 2017 .
- ↑ ليانغ، مودونغ (2017-08-08). "متى قررت دبيان تفعيل PIE افتراضيًا؟" . debian.org . مؤرشف من الأصل في 2021-07-09 . تم الاطلاع عليه في 2021-07-06 .
- ↑ "تحسينات الأمان في نظام أندرويد من الإصدار 1.5 إلى 4.1 - مشروع أندرويد مفتوح المصدر" . مشروع أندرويد مفتوح المصدر . مؤرشف من الأصل بتاريخ 26 يونيو 2022. تم الاطلاع عليه بتاريخ 25 يوليو 2016 .
- ↑ "تحسينات الأمان في نظام أندرويد 5.0 - مشروع أندرويد مفتوح المصدر" . مشروع أندرويد مفتوح المصدر . مؤرشف من الأصل بتاريخ 27 فبراير 2017. تم الاطلاع عليه بتاريخ 25 يوليو 2016 .
- "7.9.5. كود لينكس المستقل عن الموقع" . دليل مرجعي لمعالج Nios II . إنتل .
- "كود مستقل عن الموقع" . دليل الرابط والمكتبات . أوراكل .
روابط خارجية
- مقدمة إلى رمز مستقل عن الموقع
- مكونات الكود الداخلية المستقلة عن الموقع
- البرمجة بلغة التجميع باستخدام متحكم PIC
- الحالة الغريبة للملفات التنفيذية المستقلة عن الموقع
- تقنية نظام التشغيل
- مكتبات الحاسوب
- تنسيقات ملفات الحاسوب
