.\" -*- coding: UTF-8 -*- .\" Copyright 1995, Michael Chastain .\" Copyright 2015, Andrew Lutomirski .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH modify_ldt 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم modify_ldt \- الحصول على أو تعيين إدخال LDT لكل عملية .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP /* Definition of \fBstruct user_desc\fP */ \fB#include \fP /* Definition of \fBSYS_*\fP constants */ \fB#include \fP .P \fBint syscall(\fPunsigned long bytecount; \fB SYS_modify_ldt, int \fP\fIfunc\fP\fB, void \fP\fIptr\fP\fB[\fP\fIbytecount\fP\fB],\fP \fB unsigned long \fP\fIbytecount\fP\fB);\fP .fi .P \fIملاحظة\fP: لا توفر glibc غلافًا لـ \fBmodify_ldt\fP()، مما يستلزم استخدام \fBsyscall\fP(2). .SH الوصف يقرأ أو يكتب \fBmodify_ldt\fP() جدول الواصفات المحلي (LDT) لعملية. LDT هو مصفوفة من واصفات المقاطع التي يمكن للكود البرمجي للمستخدم الإشارة إليها. يسمح لينكس للعمليات بتكوين LDT لكل عملية (في الواقع لكل mm). لمزيد من المعلومات حول LDT، راجع دليل مطور برامج إنتل أو دليل برمجة بنية AMD. .P عندما يكون \fIfunc\fP هو 0، يقرأ \fBmodify_ldt\fP() LDT في الذاكرة المشار إليها بواسطة \fIptr\fP. عدد البايتات المقروءة هو الأصغر بين \fIbytecount\fP والحجم الفعلي لـ LDT، على الرغم من أن النواة قد تتصرف كما لو أن LDT مبطن ببايتات صفرية إضافية في النهاية. عند النجاح، يُرجع \fBmodify_ldt\fP() عدد البايتات المقروءة. .P عندما يكون \fIfunc\fP هو 1 أو 0x11، يعدل \fBmodify_ldt\fP() إدخال LDT المشار إليه بواسطة \fIptr\->entry_number\fP. يشير \fIptr\fP إلى بنية \fIuser_desc\fP ويجب أن يساوي \fIbytecount\fP حجم هذه البنية. .P يتم تعريف بنية \fIuser_desc\fP في \fI\fP على النحو التالي: .P .in +4n .EX struct user_desc { unsigned int entry_number; unsigned int base_addr; unsigned int limit; unsigned int seg_32bit:1; unsigned int contents:2; unsigned int read_exec_only:1; unsigned int limit_in_pages:1; unsigned int seg_not_present:1; unsigned int useable:1; }; .EE .in .P في لينكس 2.4 والإصدارات الأقدم، كانت هذه البنية تُسمى \fImodify_ldt_ldt_s\fP. .P حقل \fIcontents\fP هو نوع المقطع (بيانات، بيانات موسعة للأسفل، كود غير متوافق، أو كود متوافق). تتطابق الحقول الأخرى مع أوصافها في دليل وحدة المعالجة المركزية، على الرغم من أن \fBmodify_ldt\fP() لا يمكنه تعيين البت "accessed" المحدد بواسطة العتاد والموصوف في دليل وحدة المعالجة المركزية. .P يُعتبر \fIuser_desc\fP "فارغًا" إذا تم تعيين \fIread_exec_only\fP و \fIseg_not_present\fP إلى 1 وجميع الحقول الأخرى هي 0. يمكن مسح إدخال LDT عن طريق تعيينه إلى \fIuser_desc\fP "فارغ" أو، إذا كان \fIfunc\fP هو 1، عن طريق تعيين كل من \fIbase\fP و \fIlimit\fP إلى 0. .P سيتم رفض مقطع كود متوافق (أي الذي يحتوي على \fIcontents==3\fP) إذا كان \fIfunc\fP هو 1 أو إذا كان \fIseg_not_present\fP هو 0. .P عندما يكون \fIfunc\fP هو 2، سيقرأ \fBmodify_ldt\fP() أصفارًا. يبدو أن هذا بقايا من لينكس 2.4. .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBmodify_ldt\fP() إما العدد الفعلي للبايتات المقروءة (للقراءة) أو 0 (للكتابة). عند الفشل، يُرجع \fBmodify_ldt\fP() \-1 ويضبط \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEFAULT\fP يشير \fIptr\fP إلى خارج مساحة العنوان. .TP \fBEINVAL\fP \fIptr\fP هو 0، أو \fIfunc\fP هو 1 و \fIbytecount\fP لا يساوي حجم البنية \fIuser_desc\fP، أو \fIfunc\fP هو 1 أو 0x11 وإدخال LDT الجديد يحتوي على قيم غير صالحة. .TP \fBENOSYS\fP \fIfunc\fP ليس 0، 1، 2، ولا 0x11. .SH المعايير لينكس. .SH ملاحظات لا ينبغي استخدام \fBmodify_ldt\fP() للتخزين المحلي للخيوط، لأنه يبطئ تبديل السياق ويدعم فقط عددًا محدودًا من الخيوط. يجب أن تستخدم مكتبات الخيوط \fBset_thread_area\fP(2) أو \fBarch_prctl\fP(2) بدلاً من ذلك، باستثناء النوى القديمة جدًا التي لا تدعم تلك الاستدعاءات النظامية. .P الاستخدام الطبيعي لـ \fBmodify_ldt\fP() هو تشغيل كود قديم 16 بت أو كود 32 بت مجزأ. ومع ذلك، لا تسمح جميع النوى بتثبيت مقاطع 16 بت. .P حتى على النوى 64 بت، لا يمكن استخدام \fBmodify_ldt\fP() لإنشاء مقطع كود وضع طويل (أي 64 بت). الحقل غير الموثق "lm" في \fIuser_desc\fP ليس مفيدًا، وعلى الرغم من اسمه، لا ينتج عنه مقطع وضع طويل. .SH العلل .\" commit e30ab185c490e9a9381385529e0fd32f0a399495 على النوى 64 بت قبل لينكس 3.19، يمنع تعيين بت "lm" في \fIuser_desc\fP اعتبار الواصف فارغًا. ضع في اعتبارك أن بت "lm" غير موجود في الرؤوس 32 بت، لكن هذه النوى المعيبة ستظل تلاحظ البت حتى عند تعيينه في عملية 32 بت. .SH "انظر أيضًا" \fBarch_prctl\fP(2), \fBset_thread_area\fP(2), \fBvm86\fP(2) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .