.\" -*- coding: UTF-8 -*- .\" Copyright 2007-2016, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" %%%LICENSE_START(PUBLIC_DOMAIN) .\" This is in the public domain .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ld.so 8 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم ld.so, ld\-linux.so \- رابط/محمل ديناميكي .SH موجز يمكن تشغيل الرابط الديناميكي إما بشكل غير مباشر عن طريق تشغيل برنامج مرتبط ديناميكيًا أو كائن مشترك (وفي هذه الحالة لا يمكن تمرير خيارات سطر أوامر للرابط الديناميكي، وفي حالة ELF، يُنفذ الرابط الديناميكي المخزن في قسم \&\fB.interp\fP من البرنامج) أو بشكل مباشر عن طريق تشغيل: .P \fI/lib/ld\-linux.so.*\fP [خيارات] [برنامج [وسائط]] .SH الوصف يجد البرنامجان \fBld.so\fP و \fBld\-linux.so*\fP ويحملان الكائنات المشتركة (المكتبات المشتركة) التي يحتاجها البرنامج، ويجهزان البرنامج للتشغيل، ثم يشغلانه. .P تتطلب ثنائيات لينكس الربط الديناميكي (الربط في وقت التشغيل) ما لم يُعطى الخيار \fB\-static\fP لـ \fBld\fP(1) أثناء التجميع. .P يتعامل البرنامج \fBld.so\fP مع ثنائيات a.out، وهو تنسيق ثنائي استُخدم منذ زمن بعيد. يتعامل البرنامج \fBld\-linux.so*\fP (\fI/lib/ld\-linux.so.1\fP لـ libc5، \fI/lib/ld\-linux.so.2\fP لـ glibc2) مع الثنائيات الموجودة في تنسيق ELF الأكثر حداثة. كلا البرنامجين لهما نفس السلوك، ويستخدمان نفس ملفات وبرامج الدعم (\fBldd\fP(1)، \fBldconfig\fP(8)، و \fI/etc/ld.so.conf\fP). .P عند حل تبعيات الكائن المشترك، يفحص الرابط الديناميكي أولاً كل سلسلة تبعية ليرى ما إذا كانت تحتوي على شرطة مائلة (يمكن أن يحدث هذا إذا حُدد اسم مسار كائن مشترك يحتوي على شرطات مائلة في وقت الربط). إذا وُجدت شرطة مائلة، فستُفسر سلسلة التبعية كاسم مسار (نسبي أو مطلق)، ويُحمّل الكائن المشترك باستخدام اسم المسار ذلك. .P إذا لم تحتوِ تبعية كائن مشترك على شرطة مائلة، فسيُبحث عنها بالترتيب التالي: .IP (1) 5 باستخدام الدلائل المحددة في سمة القسم الديناميكي DT_RPATH للثنائي إذا كانت موجودة وسمة DT_RUNPATH غير موجودة. .IP (2) باستخدام متغير البيئة \fBLD_LIBRARY_PATH\fP، ما لم يُشغل الملف القابل للتنفيذ في وضع التنفيذ الآمن (انظر أدناه)، وفي هذه الحالة يتُجاهل هذا المتغير. .IP (3) باستخدام الدلائل المحددة في سمة القسم الديناميكي DT_RUNPATH للثنائي إذا كانت موجودة. يُبحث في هذه الدلائل فقط للعثور على الكائنات المطلوبة بواسطة إدخالات DT_NEEDED (التبعيات المباشرة) ولا تنطبق على الكائنات التابعة لها، والتي يجب أن تحتوي هي نفسها على إدخالات DT_RUNPATH خاصة بها. هذا يختلف عن DT_RPATH، الذي يُطبق على عمليات البحث لجميع الكائنات التابعة في شجرة التبعية. .IP (4) من ملف الخبيئة \fI/etc/ld.so.cache\fP، الذي يحتوي على قائمة مجمعة من الكائنات المشتركة المرشحة التي عُثر عليها سابقًا في مسار المكتبة المعزز. ومع ذلك، إذا رُبط الثنائي مع خيار الرابط \fB\-z nodefaultlib\fP، فسيتُخطى الكائنات المشتركة في المسارات المبدئية. تُفضّل الكائنات المشتركة المثبتة في دلائل قدرات الأجهزة (انظر أدناه) على الكائنات المشتركة الأخرى. .IP (5) .\" في المسار المبدئي \fI/lib\fP، ثم \fI/usr/lib\fP. (في بعض البنى 64\-بت، المسارات المبدئية للكائنات المشتركة 64\-بت هي \fI/lib64\fP، ثم \fI/usr/lib64\fP.) إذا رُبط الثنائي مع خيار الرابط \fB\-z nodefaultlib\fP، فسيتخطى هذه الخطوة. .SS "رموز السلسلة الديناميكية" في عدة أماكن، يقوم الرابط الديناميكي بتوسيع رموز السلسلة الديناميكية: .IP \[bu] 3 في متغيرات البيئة \fBLD_LIBRARY_PATH\fP و \fBLD_PRELOAD\fP و \fBLD_AUDIT\fP، .IP \[bu] داخل قيم علامات القسم الديناميكي \fBDT_NEEDED\fP و \fBDT_RPATH\fP و \fBDT_RUNPATH\fP و \fBDT_AUDIT\fP و \fBDT_DEPAUDIT\fP لثنائيات ELF، .IP \[bu] في وسائط خيارات سطر أوامر \fBld.so\fP \fB\-\-audit\fP و \fB\-\-library\-path\fP و \fB\-\-preload\fP (انظر أدناه)، و .IP \[bu] في وسائط اسم الملف للدالتين \fBdlopen\fP(3) و \fBdlmopen\fP(3). .P الرموز المستبدلة هي كما يلي: .TP \fI$ORIGIN\fP (أو ما يعادله \fI${ORIGIN}\fP) يتوسع هذا إلى الدليل الذي يحتوي على البرنامج أو الكائن المشترك. وبالتالي، يمكن تجميع تطبيق موجود في \fIsomedir/app\fP باستخدام .IP .in +4n .EX gcc \-Wl,\-rpath,\[aq]$ORIGIN/../lib\[aq] .EE .in .IP بحيث يعثر على كائن مشترك مرتبط في \fIsomedir/lib\fP بغض النظر عن موقع \fIsomedir\fP في التسلسل الهرمي للدليل. يسهل هذا إنشاء تطبيقات "جاهزة" لا تحتاج إلى التثبيت في أدلة خاصة، بل يمكن بدلاً من ذلك فك ضغطها في أي دليل مع الاستمرار في العثور على كائناتها المشتركة. .TP \fI$LIB\fP (أو ما يعادله \fI${LIB}\fP) يتوسع هذا إلى \fIlib\fP أو \fIlib64\fP اعتمادًا على البنية (مثلًا، على x86\-64، يتوسع إلى \fIlib64\fP وعلى x86\-32، يتوسع إلى \fIlib\fP). .TP \fI$PLATFORM\fP (أو ما يعادله \fI${PLATFORM}\fP) .\" To get an idea of the places that $PLATFORM would match, .\" look at the output of the following: .\" .\" mkdir /tmp/d .\" LD_LIBRARY_PATH=/tmp/d strace -e open /bin/date 2>&1 | grep /tmp/d .\" .\" ld.so lets names be abbreviated, so $O will work for $ORIGIN; .\" Don't do this!! يتوسع هذا إلى سلسلة نصية تتوافق مع نوع معالج النظام المضيف (مثلًا، "x86_64"). في بعض البنيات، لا يوفر نواة لينكس سلسلة منصة للمُوصِل الديناميكي. تؤخذ قيمة هذه السلسلة من قيمة \fBAT_PLATFORM\fP في المتجه المساعد (انظر \fBgetauxval\fP(3)). .P لاحظ أن رموز السلسلة الديناميكية يجب أن تُقتبس بشكل صحيح عند تعيينها من الصدفة، لمنع توسعها كمتغيرات صدفة أو بيئة. .SH الخيارات .TP \fB\-\-argv0\fP \f[I]string\fR (منذ glibc 2.33) اضبط \fIargv[0]\fP على القيمة \fIstring\fP قبل تشغيل البرنامج. .TP \fB\-\-audit\fP\fI قائمة\fP استخدم الكائنات المُسماة في \fIlist\fP كمدققين. تُفصل الكائنات في \fIlist\fP بنقطتين رأسيتين. .TP \fB\-\-glibc\-hwcaps\-mask\fP\fI list\fP ابحث فقط في الأدلة الفرعية المضمنة إذا كانت في \fIlist\fP. .TP \fB\-\-glibc\-hwcaps\-prepend\fP\fI list\fP ابحث في الأدلة الفرعية glibc\-hwcaps في \fIlist\fP. .TP \fB\-\-inhibit\-cache\fP لا تستخدم \fI/etc/ld.so.cache\fP. .TP \fB\-\-library\-path\fP\fI مسار\fP استخدم \fIpath\fP بدلاً من إعداد متغير البيئة \fBLD_LIBRARY_PATH\fP (انظر أدناه). تُفسر الأسماء \fIORIGIN\fP و\fILIB\fP و\fIPLATFORM\fP كما هو الحال مع متغير البيئة \fBLD_LIBRARY_PATH\fP. .TP \fB\-\-inhibit\-rpath\fP\fI قائمة\fP تجاهل معلومات RPATH وRUNPATH في أسماء الكائنات في \fIlist\fP. يُتجاهل هذا الخيار عند التشغيل في وضع التنفيذ الآمن (انظر أدناه). تُفصل الكائنات في \fIlist\fP بنقطتين رأسيتين أو مسافات. .TP \fB\-\-list\fP اسرد كل التبعيات وكيفية حلها. .TP \fB\-\-list\-diagnostics\fP (منذ glibc 2.33) اطبع معلومات تشخيص النظام بتنسيق قابل للقراءة آليًا، مثل بعض متغيرات المحمل الداخلية، والمتجه المساعد (انظر \fBgetauxval\fP(3))، ومتغيرات البيئة. في بعض البنى، قد يطبع الأمر معلومات إضافية (مثل ميزات وحدة المعالجة المركزية المستخدمة في اختيار الدوال غير المباشرة لـ GNU على x86). \fB\-\-list\-tunables\fP (منذ glibc 2.33) اطبع أسماء وقيم جميع القابلات للضبط، مع الحد الأدنى والحد الأقصى المسموح بهما. .TP \fB\-\-preload\fP \f[I]list\fR (منذ glibc 2.30) حمّل مسبقًا الكائنات المحددة في \fIlist\fP. تُفصل الكائنات في \fIlist\fP بنقطتين رأسيتين أو مسافات. تُحمل الكائنات مسبقًا كما هو موضح في وصف متغير البيئة \fBLD_PRELOAD\fP أدناه. .IP على النقيض من \fBLD_PRELOAD\fP، يوفر الخيار \fB\-\-preload\fP طريقة لأداء التحميل المسبق لملف تنفيذي واحد دون التأثير على التحميل المسبق المُجرى في أي عملية فرعية تنفذ برنامجًا جديدًا. .TP \fB\-\-verify\fP تحقق من أن البرنامج مرتبط ديناميكيًا وأن هذا الرابط الديناميكي يمكنه معالجته. .SH البيئة .\" تؤثر متغيرات بيئة متنوعة على تشغيل الرابط الديناميكي. .SS "وضع التنفيذ الآمن" لأسباب أمنية، إذا قرر الرابط الديناميكي أن ملفًا ثنائيًا يجب تشغيله في وضع التنفيذ الآمن، تُبطل أو تُعدل تأثيرات بعض متغيرات البيئة، وعلاوة على ذلك تُزال تلك المتغيرات من البيئة، بحيث لا يرى البرنامج التعريفات حتى. بعض متغيرات البيئة هذه تؤثر على تشغيل الرابط الديناميكي نفسه، وهي موصوفة أدناه. متغيرات البيئة الأخرى المعالجة بهذه الطريقة تشمل: \fBGCONV_PATH\fP، \fBGETCONF_DIR\fP، \fBHOSTALIASES\fP، \fBLOCALDOMAIN\fP، \fBLD_AUDIT\fP، \fBLD_DEBUG\fP، \fBLD_DEBUG_OUTPUT\fP، \fBLD_DYNAMIC_WEAK\fP، \fBLD_HWCAP_MASK\fP، \fBLD_LIBRARY_PATH\fP، \fBLD_ORIGIN_PATH\fP، \fBLD_PRELOAD\fP، \fBLD_PROFILE\fP، \fBLD_SHOW_AUXV\fP، \fBLOCALDOMAIN\fP، \fBLOCPATH\fP، \fBMALLOC_TRACE\fP، \fBNIS_PATH\fP، \fBNLSPATH\fP، \fBRESOLV_HOST_CONF\fP، \fBRES_OPTIONS\fP، \fBTMPDIR\fP، و\fBTZDIR\fP. .P يُشغل ملف ثنائي في وضع التنفيذ الآمن إذا كان للإدخال \fBAT_SECURE\fP في المتجه المساعد (انظر \fBgetauxval\fP(3)) قيمة غير صفرية. قد يكون لهذا الإدخال قيمة غير صفرية لأسباب متنوعة، بما في ذلك: .IP \[bu] 3 تختلف معرفات المستخدم الحقيقية والفعالة للعملية، أو تختلف معرفات المجموعة الحقيقية والفعالة. يحدث هذا عادةً نتيجة تنفيذ برنامج set\-user\-ID أو set\-group\-ID. .IP \[bu] نفذت عملية ذات معرف مستخدم غير جذر ملفًا ثنائيًا منح قدرات للعملية. .IP \[bu] .\" قد تكون قيمة غير صفرية قد عُينت بواسطة وحدة أمان لينكس. .SS "متغيرات البيئة" من بين متغيرات البيئة الأكثر أهمية ما يلي: .TP \fBLD_ASSUME_KERNEL\fP (من glibc 2.2.3 إلى glibc 2.36) يمكن لكل كائن مشترك إعلام الرابط الديناميكي بأقل إصدار ABI للنواة الذي يتطلبه. (يُرمّز هذا المطلب في قسم ملاحظات ELF يمكن عرضه عبر \fIreadelf\ \-n\fP كقسم معنون \fBNT_GNU_ABI_TAG\fP.) في وقت التشغيل، يحدد الرابط الديناميكي إصدار ABI للنواة الجاري تشغيلها ويرفض تحميل الكائنات المشتركة التي تحدد إصدارات ABI دنيا تتجاوز ذلك الإصدار. .IP يمكن استخدام \fBLD_ASSUME_KERNEL\fP لجعل الرابط الديناميكي يفترض أنه يعمل على نظام بإصدار ABI نواة مختلف. على سبيل المثال، يتسبب سطر الأوامر التالي في افتراض الرابط الديناميكي أنه يعمل على Linux 2.2.5 عند تحميل الكائنات المشتركة المطلوبة بواسطة \fImyprog\fP: .IP .in +4n .EX $\fB LD_ASSUME_KERNEL=2.2.5 ./myprog\fP .EE .in .IP على الأنظمة التي توفر إصدارات متعددة من كائن مشترك (في أدلة مختلفة في مسار البحث) بمتطلبات إصدار ABI نواة دنيا مختلفة، يمكن استخدام \fBLD_ASSUME_KERNEL\fP لاختيار إصدار الكائن المستخدم (اعتمادًا على ترتيب البحث في الدليل). .IP تاريخيًا، كان الاستخدام الأكثر شيوعًا لميزة \fBLD_ASSUME_KERNEL\fP هو الاختيار اليدوي لتطبيق LinuxThreads POSIX threads الأقدم على الأنظمة التي توفر كلاً من LinuxThreads وNPTL (والأخير كان المبدئي عادةً على هذه الأنظمة)؛ انظر \fBpthreads\fP(7). .TP \fBLD_BIND_NOW\fP (منذ glibc 2.1.1) إذا ضُبطت على سلسلة غير فارغة، يتسبب ذلك في حل الرابط الديناميكي لجميع الرموز عند بدء تشغيل البرنامج بدلاً من تأجيل حل استدعاءات الدوال إلى النقطة التي يُشار إليها أولاً. هذا مفيد عند استخدام مصحح أخطاء. .TP \fBLD_LIBRARY_PATH\fP قائمة بالأدلة التي يُبحث فيها عن مكتبات ELF في وقت التنفيذ. تُفصل العناصر في القائمة إما بنقطتين رأسيتين أو فاصلة منقوطة، ولا يوجد دعم لتخطي أي من الفاصلين. يشير اسم الدليل ذو الطول الصفري إلى دليل العمل الحالي. .IP يُتجاهل هذا المتغير في وضع التنفيذ الآمن. .IP ضمن أسماء المسارات المحددة في \fBLD_LIBRARY_PATH\fP، يوسع الرابط الديناميكي الرموز \fI$ORIGIN\fP و\fI$LIB\fP و\fI$PLATFORM\fP (أو الإصدارات التي تستخدم الأقواس المعقوفة حول الأسماء) كما هو موصوف أعلاه في \fIDynamic string tokens\fP. وبالتالي، على سبيل المثال، سيتسبب ما يلي في البحث عن مكتبة إما في الدليل الفرعي \fIlib\fP أو \fIlib64\fP أسفل الدليل المحتوي على البرنامج المراد تنفيذه: .IP .in +4n .EX $\fB LD_LIBRARY_PATH=\[aq]$ORIGIN/$LIB\[aq] prog\fP .EE .in .IP (لاحظ استخدام علامات الاقتباس المفردة، التي تمنع توسيع \fI$ORIGIN\fP و\fI$LIB\fP كمتغيرات شل!) .TP \fBLD_PRELOAD\fP قائمة بكائنات مشتركة ELF إضافية يحددها المستخدم لتُحمّل قبل جميع الكائنات الأخرى. يمكن استخدام هذه الميزة لتجاوز دوال في كائنات مشتركة أخرى بشكل انتقائي. .IP يمكن فصل عناصر القائمة بمسافات أو نقطتين رأسيتين، ولا يوجد دعم لتخطي أي من الفاصلين. يُبحث عن الكائنات باستخدام القواعد الواردة تحت DESCRIPTION. يُبحث عن الكائنات وتُضاف إلى خريطة الربط بالترتيب من اليسار إلى اليمين المحدد في القائمة. .IP في وضع التنفيذ الآمن، تُتجاهل أسماء مسارات التحميل المسبق التي تحتوي على شرطات مائلة. علاوة على ذلك، تُحمّل الكائنات المشتركة مسبقًا فقط من أدلة البحث القياسية وفقط إذا كانت تحتوي على بت وضع set\-user\-ID ممكّنًا (وهو أمر غير معتاد). .IP .\" Tested with the following: .\" .\" LD_PRELOAD='$LIB/libmod.so' LD_LIBRARY_PATH=.\& ./prog .\" .\" which will preload the libmod.so in 'lib' or 'lib64', using it .\" in preference to the version in '.'. ضمن الأسماء المحددة في قائمة \fBLD_PRELOAD\fP، يفهم الرابط الديناميكي الرموز \fI$ORIGIN\fP و\fI$LIB\fP و\fI$PLATFORM\fP (أو الإصدارات التي تستخدم الأقواس المعقوفة حول الأسماء) كما هو موصوف أعلاه في \fIDynamic string tokens\fP. (انظر أيضًا مناقشة الاقتباس تحت وصف \fBLD_LIBRARY_PATH\fP.) .IP توجد طرق مختلفة لتحديد المكتبات التي ستُحمل مسبقًا، ويتُعامل معها بالترتيب التالي: .RS .IP (1) 5 متغير البيئة \fBLD_PRELOAD\fP. .IP (2) خيار سطر الأوامر \fB\-\-preload\fP عند استدعاء الرابط الديناميكي مباشرة. .IP (3) الملف \fI/etc/ld.so.preload\fP (الموصوف أدناه). .RE .TP \fBLD_TRACE_LOADED_OBJECTS\fP إذا عُيين (إلى أي قيمة)، يتسبب في قيام البرنامج بسرد تبعياته الديناميكية، كما لو شُغل بواسطة \fBldd\fP(1)، بدلاً من التشغيل العادي. .P ثم هناك الكثير من المتغيرات الغامضة إلى حد ما، العديد منها قديم أو للاستخدام الداخلي فقط. .TP \fBLD_AUDIT\fP (منذ glibc 2.4) قائمة من الكائنات المشتركة ELF المحددة من قبل المستخدم، تُحمل قبل جميع الكائنات الأخرى في مساحة اسم رابط منفصلة (أي مساحة لا تتداخل مع روابط الرموز العادية التي قد تحدث في العملية). يمكن استخدام هذه الكائنات لتدقيق تشغيل الرابط الديناميكي. العناصر في القائمة مفصولة بنقطتين، ولا يوجد دعم لتجاوز الفاصل. .IP يُتجاهل \fBLD_AUDIT\fP في وضع التنفيذ الآمن. .IP سيقوم الرابط الديناميكي بإخطار الكائنات المشتركة للتدقيق عند نقاط التفتيش المسماة بالتدقيق\[em]على سبيل المثال، تحميل كائن مشترك جديد، حل رمز، أو استدعاء رمز من كائن مشترك آخر\[em]عن طريق استدعاء دالة مناسبة داخل الكائن المشترك للتدقيق. للتفاصيل، انظر \fBrtld\-audit\fP(7). واجهة التدقيق متوافقة إلى حد كبير مع تلك المقدمة على Solaris، كما هو موصوف في دليل \fILinker and Libraries Guide\fP، في الفصل \fIRuntime Linker Auditing Interface\fP. .IP ضمن الأسماء المحددة في قائمة \fBLD_AUDIT\fP، يفهم الرابط الديناميكي الرموز \fI$ORIGIN\fP و\fI$LIB\fP و\fI$PLATFORM\fP (أو الإصدارات التي تستخدم الأقواس المتعرجة حول الأسماء) كما هو موصوف أعلاه في \fIDynamic string tokens\fP. (انظر أيضًا مناقشة الاقتباس تحت وصف \fBLD_LIBRARY_PATH\fP.) .IP .\" commit 8e9f92e9d5d7737afdacf79b76d98c4c42980508 منذ glibc 2.13، في وضع التنفيذ الآمن، يُتجاهل الأسماء في قائمة التدقيق التي تحتوي على شرطات مائلة، وتُحمّل الكائنات المشتركة فقط في أدلة البحث القياسية التي تحتوي على بت وضع set\-user\-ID ممكّنًا. .TP \fBLD_BIND_NOT\fP (منذ glibc 2.1.95) إذا عُيين متغير البيئة هذا إلى سلسلة غير فارغة، لا تقم بتحديث GOT (جدول الإزاحة العام) وPLT (جدول ربط الإجراءات) بعد حل رمز دالة. من خلال الجمع بين استخدام هذا المتغير مع \fBLD_DEBUG\fP (مع الفئات \fIbindings\fP و\fIsymbols\fP)، يمكن للمرء ملاحظة جميع روابط الدوال في وقت التشغيل. .TP \fBLD_DEBUG\fP (منذ glibc 2.1) إخراج معلومات تصحيح مفصلة حول تشغيل الرابط الديناميكي. محتوى هذا المتغير هو فئة واحدة أو أكثر من الفئات التالية، مفصولة بنقطتين، أو فواصل، أو (إذا كانت القيمة مقتبسة) مسافات: .RS .TP 12 \fIhelp\fP تحديد \fIhelp\fP في قيمة هذا المتغير لا يشغل البرنامج المحدد، ويعرض رسالة مساعدة حول الفئات التي يمكن تحديدها في متغير البيئة هذا. .TP \fIall\fP طباعة جميع معلومات التصحيح (باستثناء \fIstatistics\fP و\fIunused\fP؛ انظر أدناه). .TP \fIbindings\fP عرض معلومات حول التعريف الذي يرتبط به كل رمز. .TP \fIfiles\fP عرض التقدم لملف الإدخال. .TP \fIlibs\fP عرض مسارات بحث المكتبات. .TP \fIreloc\fP عرض معالجة إعادة التحديد. .TP \fIscopes\fP عرض معلومات النطاق. .TP \fIstatistics\fP عرض إحصائيات إعادة التحديد. .TP \fIsymbols\fP عرض مسارات البحث لكل بحث رمز. .TP \fIunused\fP تحديد كائنات DSO غير المستخدمة. .TP \fIversions\fP عرض تبعيات الإصدار. .RE .IP منذ glibc 2.3.4، يُتجاهل \fBLD_DEBUG\fP في وضع التنفيذ الآمن، ما لم يكن الملف \fI/etc/suid\-debug\fP موجودًا (محتوى الملف غير ذي صلة). .TP \fBLD_DEBUG_OUTPUT\fP (منذ glibc 2.1) مبدئيًا، يُكتب مخرج \fBLD_DEBUG\fP إلى الخطأ المعياري. إذا عُرف \fBLD_DEBUG_OUTPUT\fP، يُكتب المخرج إلى اسم المسار المحدد بقيمته، مع اللاحقة "." (نقطة) متبوعة بمعرف العملية المُلحق باسم المسار. .IP يُتجاهل \fBLD_DEBUG_OUTPUT\fP في وضع التنفيذ الآمن. .TP \fBLD_DYNAMIC_WEAK\fP (since glibc 2.1.91) بشكل مبدئي، عند البحث في المكتبات المشتركة لحل مرجع رمز، سيقوم الرابط الديناميكي بالحل إلى أول تعريف يجده. .IP الإصدارات القديمة من glibc (قبل glibc 2.2) قدمت سلوكًا مختلفًا: إذا وجد الرابط رمزًا ضعيفًا، فإنه يتذكر ذلك الرمز ويواصل البحث في المكتبات المشتركة المتبقية. إذا وجد لاحقًا تعريفًا قويًا لنفس الرمز، فإنه يستخدم ذلك التعريف بدلاً من ذلك. (إذا لم يُعثر على رمز إضافي، فإن الرابط الديناميكي يستخدم الرمز الضعيف الذي وجده في البداية.) .IP .\" More precisely 2.1.92 .\" See weak handling .\" https://www.sourceware.org/ml/libc-hacker/2000-06/msg00029.html .\" To: GNU libc hacker .\" Subject: weak handling .\" From: Ulrich Drepper .\" Date: 07 Jun 2000 20:08:12 -0700 .\" Reply-To: drepper at cygnus dot com (Ulrich Drepper) السلوك القديم لـ glibc كان غير قياسي. (الممارسة القياسية هي أن التمييز بين الرموز الضعيفة والقوية يجب أن يكون له تأثير فقط في وقت الربط الثابت.) في glibc 2.2، عُدل الرابط الديناميكي لتوفير السلوك الحالي (وهو السلوك الذي قدمته معظم التطبيقات الأخرى في ذلك الوقت). .IP تعريف متغير البيئة \fBLD_DYNAMIC_WEAK\fP (بأي قيمة) يوفر السلوك القديم (غير القياسي) لـ glibc، حيث يمكن تجاوز رمز ضعيف في مكتبة مشتركة بواسطة رمز قوي يُكتشف لاحقًا في مكتبة مشتركة أخرى. (لاحظ أنه حتى عند تعيين هذا المتغير، فإن الرمز القوي في مكتبة مشتركة لن يتجاوز تعريفًا ضعيفًا لنفس الرمز في البرنامج الرئيس.) .IP منذ glibc 2.3.4، يتم تجاهل \fBLD_DYNAMIC_WEAK\fP في وضع التنفيذ الآمن. .TP \fBLD_HWCAP_MASK\fP (من glibc 2.1 إلى glibc 2.38) قناع لقدرات العتاد. منذ glibc 2.26، قد يُتجاهل الخيار إذا كان glibc لا يدعم القابلات للتعديل. .TP \fBLD_ORIGIN_PATH\fP (منذ glibc 2.1) .\" Used only if $ORIGIN can't be determined by normal means .\" (from the origin path saved at load time, or from /proc/self/exe)? المسار الذي عُثر على الملف الثنائي فيه. .IP منذ glibc 2.4، يُتجاهل \fBLD_ORIGIN_PATH\fP في وضع التنفيذ الآمن. .TP \fBLD_POINTER_GUARD\fP (من glibc 2.4 إلى glibc 2.22) .\" commit a014cecd82b71b70a6a843e250e06b541ad524f7 اضبط على 0 لتعطيل حماية المؤشر. أي قيمة أخرى تمكن حماية المؤشر، وهو أيضًا المبدئي. حماية المؤشر هي آلية أمان حيث تُشوه بعض المؤشرات إلى الكود المخزن في ذاكرة البرنامج القابلة للكتابة (عناوين العودة المحفوظة بواسطة \fBsetjmp\fP(3) أو مؤشرات الدوال المستخدمة بواسطة مكونات glibc الداخلية المختلفة) بشكل شبه عشوائي لجعل من الصعب على المهاجم اختطاف المؤشرات لاستخدامها في حالة تجاوز سعة المخزن المؤقت أو هجوم تحطيم المكدس. منذ glibc 2.23، لم يعد بإمكان \fBLD_POINTER_GUARD\fP استخدامه لتعطيل حماية المؤشر، والتي أصبحت الآن ممكنة دائمًا. .TP \fBLD_PROFILE\fP (منذ glibc 2.1) اسم كائن مشترك (واحد) ليُحلل، محدد إما كاسم مسار أو اسم ابن. تُلحق مخرجات التحليل بالملف الذي اسمه: \%$LD_PROFILE_OUTPUT\fI/\:\fP$LD_PROFILE\fI.profile\fP. .IP منذ glibc 2.2.5، يستخدم \fBLD_PROFILE\fP مسارًا مبدئيًا مختلفًا في وضع التنفيذ الآمن. .TP \fBLD_PROFILE_OUTPUT\fP (منذ glibc 2.1) الدليل حيث يجب كتابة مخرجات \fBLD_PROFILE\fP. إذا لم يُعرف هذا المتغير، أو عُرفه كسلسلة فارغة، فإن المبدئي هو \fI/var/tmp\fP. .IP يُتجاهل \fBLD_PROFILE_OUTPUT\fP في وضع التنفيذ الآمن؛ بدلاً من ذلك، يُستخدم \fI/var/profile\fP دائمًا. .TP \fBLD_SHOW_AUXV\fP (منذ glibc 2.1) إذا عُرف متغير البيئة هذا (بأي قيمة)، فستُعرض المصفوفة المساعدة الممررة من النواة (انظر أيضًا \fBgetauxval\fP(3)). .IP منذ glibc 2.3.4، يُتجاهل \fBLD_SHOW_AUXV\fP في وضع التنفيذ الآمن. .TP \fBLD_TRACE_PRELINKING\fP (من glibc 2.4 إلى glibc 2.35) .\" (This is what seems to happen, from experimenting) إذا عُرف متغير البيئة هذا، يُتتبع الربط المسبق للكائن الذي عُيين اسمه لمتغير البيئة هذا. (استخدم \fBldd\fP(1) للحصول على قائمة بالكائنات التي قد تُتبع.) إذا لم يتعرف على اسم الكائن، فسيتتبع جميع أنشطة الربط المسبق. .TP \fBLD_USE_LOAD_BIAS\fP (من glibc 2.3.3 إلى glibc 2.35) .\" http://sources.redhat.com/ml/libc-hacker/2003-11/msg00127.html .\" Subject: [PATCH] Support LD_USE_LOAD_BIAS .\" Jakub Jelinek بشكل مبدئي (أي إذا لم يُعرف هذا المتغير)، ستلتزم الملفات التنفيذية والكائنات المشتركة المربوطة مسبقًا بالعناوين الأساسية للكائنات المشتركة التابعة لها، بينما لن تلتزم بها الملفات التنفيذية المستقلة عن الموضع (غير المربوطة مسبقًا) والكائنات المشتركة الأخرى. إذا عُرف \fBLD_USE_LOAD_BIAS\fP بالقيمة 1، فستلتزم كل من الملفات التنفيذية وملفات PIE بالعناوين الأساسية. إذا عُرف \fBLD_USE_LOAD_BIAS\fP بالقيمة 0، فلن تلتزم الملفات التنفيذية ولا ملفات PIE بالعناوين الأساسية. .IP منذ glibc 2.3.3، يُتجاهل هذا المتغير في وضع التنفيذ الآمن. .TP \fBLD_VERBOSE\fP (منذ glibc 2.1) إذا عُيين إلى سلسلة غير فارغة، فسيُخرج معلومات إصدار الرموز حول البرنامج إذا عُيين متغير البيئة \fBLD_TRACE_LOADED_OBJECTS\fP. .TP \fBLD_WARN\fP (منذ glibc 2.1.3) إذا عُيين إلى سلسلة غير فارغة، فسيُحذر حول الرموز غير المحلولة. .TP \fBLD_PREFER_MAP_32BIT_EXEC\fP (x86\-64 فقط؛ منذ glibc 2.23) وفقًا لدليل تحسين برامج Intel Silvermont، بالنسبة للتطبيقات 64 بت، قد يتأثر أداء توقع الفروع سلبًا عندما يكون هدف الفرع على بعد أكثر من 4 جيجابايت من الفرع. إذا عُيين متغير البيئة هذا (إلى أي قيمة)، فسيحاول الموصّل الديناميكي أولاً تعيين الصفحات القابلة للتنفيذ باستخدام علامة \fBMAP_32BIT\fP من \fBmmap\fP(2)، وسيعود إلى التعيين بدون تلك العلامة إذا فشلت تلك المحاولة. ملاحظة: MAP_32BIT سيعيّن إلى 2 جيجابايت المنخفضة (وليس 4 جيجابايت) من مساحة العنوان. .IP نظرًا لأن \fBMAP_32BIT\fP يقلل من نطاق العناوين المتاح لعشوائية تخطيط مساحة العنوان (ASLR)، فإن \fBLD_PREFER_MAP_32BIT_EXEC\fP معطل دائمًا في وضع التنفيذ الآمن. .SH الملفات .TP \fI/lib/ld.so\fP الموصّل/المُحمّل الديناميكي a.out .TP \fI/lib/ld\-linux.so.\fP{\fI1\fP,\fI2\fP} الموصّل/المُحمّل الديناميكي ELF .TP \fI/etc/ld.so.cache\fP ملف يحتوي على قائمة مجمّعة من الدلائل للبحث عن الكائنات المشتركة وقائمة مرتبة من الكائنات المشتركة المرشحة. انظر \fBldconfig\fP(8). .TP \fI/etc/ld.so.preload\fP ملف يحتوي على قائمة مفصولة بمسافات بيضاء من الكائنات المشتركة ELF التي ستُحمل قبل البرنامج. انظر مناقشة \fBLD_PRELOAD\fP أعلاه. إذا اُستخدم كل من \fBLD_PRELOAD\fP و \fI/etc/ld.so.preload\fP، فستُحمل المسبق للمكتبات المحددة بواسطة \fBLD_PRELOAD\fP أولاً. \fI/etc/ld.so.preload\fP له تأثير على مستوى النظام، مما يتسبب في التحميل المسبق للمكتبات المحددة لجميع البرامج التي يُنفذها على النظام. (هذا غير مرغوب فيه عادةً، ويُستخدم فقط كعلاج طارئ، على سبيل المثال، كحل مؤقت لمشكلة تكوين مكتبة خاطئ.) .TP \fIlib*.so*\fP الكائنات المشتركة .SH ملاحظات .SS "قدرات العتاد القديمة (من glibc 2.5 إلى glibc 2.37)" .\" Presumably, this info comes from sysdeps/i386/dl-procinfo.c and .\" similar files تُجمّع بعض الكائنات المشتركة باستخدام تعليمات خاصة بالعتاد غير موجودة في كل وحدة معالجة مركزية. يجب تثبيت هذه الكائنات في أدلّة تحدد أسماؤها قدرات العتاد المطلوبة، مثل \fI/usr/lib/sse2/\fP. يتحقق الرابط الديناميكي من هذه الأدلّة مقابل عتاد الجهاز ويختار الإصدار الأنسب لكائن مشترك معيّن. يمكن تسلسل أدلّة قدرات العتاد لدمج ميزات وحدة المعالجة المركزية. تعتمد قائمة أسماء قدرات العتاد المدعومة على وحدة المعالجة المركزية. الأسماء التالية معترف بها حاليًا: .TP \fBAlpha\fP ev4، ev5، ev56، ev6، ev67 .TP \fBMIPS\fP loongson2e، loongson2f، octeon، octeon2 .TP \fBPowerPC\fP 4xxmac، altivec، arch_2_05، arch_2_06، booke، cellbe، dfp، efpdouble، efpsingle، fpu، ic_snoop، mmu، notb، pa6t، power4، power5، power5+، power6x، ppc32، ppc601، ppc64، smt، spe، ucache، vsx .TP \fBSPARC\fP flush، muldiv، stbar، swap، ultra3، v9، v9v، v9v2 .TP \fBs390\fP dfp، eimm، esan3، etf3enh، g5، highgprs، hpage، ldisp، msa، stfle، z900، z990، z9\-109، z10، zarch .TP \fBx86 (32\-bit فقط)\fP acpi، apic، clflush، cmov، cx8، dts، fxsr، ht، i386، i486، i586، i686، mca، mmx، mtrr، pat، pbe، pge، pn، pse36، sep، ss، sse، sse2، tm .P لدعم قدرات العتاد القديمة عيب يتمثل في أن كل ميزة جديدة تُضاف تزيد مسار البحث بشكل أسي، لأنها تُضاف إلى كل مجموعة من الميزات الأخرى الموجودة. .P .\" على سبيل المثال، في x86 32\-bit، إذا كان العتاد يدعم \fBi686\fP و\fBsse2\fP، سيكون مسار البحث الناتج \fBi686/sse2:i686:sse2:.\fP. قدرة جديدة \fBnewcap\fP ستضبط مسار البحث إلى \fBnewcap/i686/sse2:newcap/i686:newcap/sse2:newcap:i686/sse2:i686:sse2:\fP. .SS "قدرات عتاد glibc (من glibc 2.33)" .TP .\" The initial discussion on various pitfalls of the old scheme is .\" .\" and the patchset that proposes the glibc-hwcap support is .\" أضاف glibc 2.33 مخططًا جديدًا لقدرات العتاد، حيث يمكن تعريف مستويات معينة تحت كل بنية وحدة معالجة مركزية، لتجميع دعم ميزات أو تعليمات خاصة معينة. لكل مستوى بنية مجموعة ثابتة من المسارات التي يضيفها إلى قائمة بحث الرابط الديناميكي، اعتمادًا على عتاد الجهاز. نظرًا لأن كل مستوى بنية جديد لا يُدمج مع المستويات الموجودة سابقًا، لا يعاني المخطط الجديد من عيب زيادة قائمة بحث الرابط الديناميكي بشكل غير مسيطر عليه. .P .\" The x86_64 architectures levels are defined the official ABI: .\" .\" The PowerPC and s390x are glibc defined ones based on chip .\" support (which maps to ISA levels). على سبيل المثال، في بنية x86 64\-بت، إذا دعمت العتاد \fBx86_64\-v3\fP (مثل Intel Haswell أو AMD Excavator)، سيكون مسار البحث الناتج \fBglibc\-hwcaps/x86\-64\-v3:glibc\-hwcaps/x86\-64\-v2:.\fP المسارات التالية مدعومة حالياً، بترتيب الأولوية. .TP \fBPowerPC (64\-بت بنهاية صغيرة فقط)\fP power10, power9 .TP \fBs390 (64\-بت فقط)\fP z16, z15, z14, z13 .TP \fBx86 (64\-بت فقط)\fP x86\-64\-v4, x86\-64\-v3, x86\-64\-v2 .P .\" أزال glibc 2.37 دعم القدرات العتادية القديمة. .SH "انظر أيضًا" \fBld\fP(1), \fBldd\fP(1), \fBpldd\fP(1), \fBsprof\fP(1), \fBdlopen\fP(3), \fBgetauxval\fP(3), \fBelf\fP(5), \fBcapabilities\fP(7), \fBrtld\-audit\fP(7), \fBldconfig\fP(8), \fBsln\fP(8) .\" .SH AUTHORS .\" ld.so: David Engel, Eric Youngdale, Peter MacDonald, Hongjiu Lu, Linus .\" Torvalds, Lars Wirzenius and Mitch D'Souza .\" ld\-linux.so: Roland McGrath, Ulrich Drepper and others. .\" .\" In the above, (libc5) stands for David Engel's ld.so/ld\-linux.so. .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .