سؤال

مستوحاة من هذا السؤال

كيف يمكنني إجبار GDB على تفكيك؟

تساءلت عن INT INT 21H كمفهمة. الآن، لدي بعض المعرفة الصدئة للغاية بالداخلية، ولكن ليس الكثير من التفاصيل. أتذكر أنه في C64 كان لديك مقاطعات منتظمة ومقاطعات غير ممكنة، لكن معرفتي تتوقف هنا. هل يمكن أن تعطيني بعض الأدلة؟ هل هي استراتيجية ذات صلة DOS؟

هل كانت مفيدة؟

المحلول

من هنا: مقاطعة DOS متعددة الأغراض المستخدمة في الوظائف المختلفة بما في ذلك قراءة لوحة المفاتيح والكتابة إلى وحدة التحكم والطابعة. تم استخدامه أيضا لقراءة وأكتب الأقراص باستخدام طريقة كتلة التحكم في الملفات السابقة (FCB).

نصائح أخرى

يمكن اعتبار DOS ككتبة تستخدم لتوفير ملفات / دلائل التجريد للكمبيوتر الشخصي (- أكثر قليلا). int 21h تعد "خدعة" أجهزة بسيطة تجعلها سهلة الاتصال بمكانة من هذه المكتبة دون معرفة مقدما حيث سيتم تحديد موقعها في الذاكرة. بدلا من ذلك، يمكنك التفكير في هذا كما هي طريقة للاستفادة من DOS API.

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

السؤال الرئيسي هو ما إذا كنت في الوضع الحقيقي أو وضع حماية.

الوضع الحقيقي هو وضع التشغيل البسيط "الأصلي" لمعالج X86. هذا هو الوضع الذي يعمل DOS في (عند تشغيل برامج DOS ضمن Windows، يتم الافتراضي معالج وضع حقيقي، لذلك داخلها تنطبق نفس القواعد). البرنامج قيد التشغيل حاليا لديه التحكم الكامل في المعالج.

في الوضع الحقيقي، يوجد جدول متجهيا يروي المعالج الذي يتناول أن يقفز إلى كل مقاطعة من 0 إلى 255. يتم تعبئة هذا الجدول بواسطة BIOS و DOS، وكذلك برامج تشغيل الأجهزة، وأحيانا البرامج ذات الاحتياجات الخاصة. يمكن إنشاء بعض هذه المقاطعات بواسطة الأجهزة (على سبيل المثال عن طريق كياري). يتم إنشاء آخرين من خلال شروط برامج معينة (مثل الفجوة بنسبة 0). أي منهم يمكن أن يتم إنشاؤها عن طريق تنفيذ int n تعليمات.

يمكن لبرامج تعيين / مسح علامة "تمكين المقاطعات"؛ يؤثر هذا العلم على مقاطعات الأجهزة فقط ولا يؤثر int تعليمات.

اختار مصممون DOS استخدام رقم المقاطعة 21 ساعة للتعامل مع طلبات DOS - الرقم ليس له أهمية حقيقية: كان مجرد دخول غير مستخدم في ذلك الوقت. هناك العديد من الآخرين (الرقم 10H هو روتين مقاطعة مثبت في BIOS يتعامل مع الرسومات، على سبيل المثال). لاحظ أيضا أن كل هذا هو متوافق مع IBM PC فقط. قد تحتوي المعالجات X86 في أنظمة مضمنة على برامجها وترتيب جداول المقاطعة بشكل مختلف تماما!

وضع حماية هو وضع "أمن أمن" المعقد الذي تم تقديمه في المعالج 286 وتمديد الكثير على 386. وهو يوفر مستويات امتياز متعددة. يجب على نظام التشغيل تكوين كل هذا (وإذا كان نظام التشغيل يحصل على خطأ، فيمكنك استغلال أمان محتمل). تقتصر برامج المستخدم عموما في وضع التشغيل "الحد الأدنى من الامتياز"، حيث تحاول الوصول إلى منافذ الأجهزة، أو تغيير علامة المقاطعة، أو الوصول إلى مناطق ذاكرة معينة، وتتوقف البرنامج ويسمح لنظام التشغيل أن تقرر ما يجب القيام به (كن إنهينا البرنامج أو إعطاء البرنامج ما يبدو أنه يريد).

يتم التعامل مع المقاطعة أكثر تعقيدا. يكفي أن نقول أنه بشكل عام، إذا قام برنامج المستخدم بمقاطعة البرامج، فإن رقم المقاطعة هو ليس تستخدم كمتجه في جدول المقاطعة. بدلا من ذلك، يتم إنشاء استثناء حماية عامة ومعالج OS للحصول على استثناء المذكور (إذا كان نظام التشغيل هو تصميم بهذه الطريقة)، فهناك العملية التي تريدها العملية وخدمة الطلب. أنا متأكد من أن Linux و Windows في الماضي (إن لم يكن حاليا) استخدم هذا النوع من الآلية لمكالمات نظامهم. ولكن هناك طرق أخرى لتحقيق ذلك، مثل تعليمات Sysenter.

قائمة مقاطعة رالف براون يحتوي على الكثير من المعلومات التي يقطع فيها يفعل ما. INT 21., ، مثل كل الآخرين، يدعم مجموعة واسعة من الوظائف اعتمادا على قيم التسجيل.

أ نسخة غير اتش ملم من قائمة رالف براون كما هو متاح أيضا.

التعليم INT هو مقاطعة برنامج. يسبب القفز إلى روتين يشير إليه بواسطة متجه المقاطعة، وهو موقع ثابت في الذاكرة. إن ميزة تعليمات INT هي أن 2 بايت فقط طويلة، كما oposed إلى 6 ربما 6 ل JMP، ويمكن بسهولة إعادة توجيهها عن طريق تعديل محتويات متجه المقاطعة.

INT 0X21 هو مقاطعة X86 مقاطعة - أساسا أن هناك جدول مقاطعة في نقطة ثابتة في الذاكرة تسرد عناوين وظائف مقاطعة البرنامج. عندما يتلقى وحدة المعالجة المركزية X86 وحدة المعالجة المركزية المقاطعة (أو يجب تنفيذ مقاطعة برامج معينة)، فإنها تشير إلى أن الجدول لتنفيذ مكالمة لهذه النقطة (يجب استخدام الوظيفة في هذه النقطة iret بدلا من ret لكي ترجع).

من الممكن إعادة استخدام INT 0X21 وغيرها من المقاطعات البرامج (حتى داخل DOS على الرغم من أن هذا يمكن أن يكون له آثار جانبية سلبية). أحد البرامج المثيرة للاهتمام مقاطعة إلى الخريطة أو السلسلة هي Int 0x1c (أو 0x08 إذا كنت حذرا)، وهو مقاطعة نظام النظام، تسمى 18.2 مرة كل ثانية. يمكن استخدام هذا لإنشاء عمليات "الخلفية"، حتى في الوضع الحقيقي الخيوط الفردي (سيتم مقاطعة عملية الوضع الحقيقي 18.2 مرة ثانية واحدة للاتصال بوظيفة المقاطعة).

على نظام التشغيل DOS (أو نظام يوفر بعض مضاهاة DOS، مثل وحدة التحكم في Windows) يتم تعيين INT 0x21 إلى ما هو فعال أنظمة التشغيل DOS الرئيسية "API". من خلال توفير قيم مختلفة إلى سجل AH، يمكن تنفيذ وظائف DOS المختلفة مثل فتح ملف (AH = 0x3D) أو الطباعة إلى الشاشة (AH = 0x09).

هذا من العظيم فن برمجة لغة التجمع حول المقاطعات:

في 80 × 86، هناك ثلاثة أنواع من الأحداث المعروفة باسم المقاطعات: الفخاخ والاستثناءات والمقاطعات (مقاطعات الأجهزة). يصف هذا الفصل كل من هذه النماذج ومناقشة دعمهم على وحدة المعالجة المركزية 80x86 وآلات متوافقة مع الكمبيوتر الشخصي.

على الرغم من أن مصاص المصطلحات والاستثناء غالبا ما تستخدم مرادفا، سنستخدم مصطلح مصطلح الدلe الذي بدأه مبرمجا وبدأ نقل التحكم في روتين معالج خاص. في العديد من النواحي، فخ ليس أكثر من مكالمة فرعية متخصصة. تشير العديد من النصوص إلى الفخاخ كقاطعات البرامج. التعليمات الدولية 80x86 هي السيارة الرئيسية لتنفيذ الفخ. لاحظ أن الفخاخ عادة ما تكون مشروطة؛ وهذا هو، عند تنفيذ تعليمات INT، تتحمل التحكم دائما إلى الإجراء المرتبط بالمصيدة. نظرا لأن الفخاخ تنفذ عبر تعليمات صريحة، فمن السهل تحديد التعليمات بالضبط في البرنامج ستحصل على روتين معالجة فخ.

الفصل 17 - هيكل المقاطعة وإجراءات خدمة المقاطعة

(تقريبا) توفر واجهة DOS بأكملها كواجهات Int21h، مع معلمات في السجلات المختلفة. إنها خدعة صغيرة، باستخدام طاولة مدمجة في الأجهزة للقفز إلى الرمز الأيمن. كما كان INT 33H للماوس.

إنه "مقاطعة البرامج"؛ لذلك لا تقاطع الأجهزة على الإطلاق.

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

يعرض برنامج النظام (مثل DOS و BIOS) واجهات برمجة التطبيقات الخاصة بهم إلى التطبيق كقاطعات البرامج.

إذن مقاطعة البرنامج هو نوع من الارتباط الديناميكي.

أن تكون دقيقا، إليك الرابط المباشر إلى قائمة الأوامر R. Brown's Int 21h: http://www.ctyme.com/intr/int-21.htm.

في الواقع، هناك الكثير من المفاهيم هنا. هيا لنبدأ مع الأساسيات.

المقاطعة هي وسيلة لطلب الانتباه من وحدة المعالجة المركزية، إلى قاطع تدفق البرنامج الحالي، والانتقال إلى معالج المقاطعة (روتين خدمة ISR - مقاطعة)، قم ببعض العمل (عادة بواسطة kernel OS أو برنامج تشغيل الجهاز) ثم العودة.

ما هي بعض الاستخدامات النموذجية للمقاطعات؟

  • مقاطعات الأجهزة: يطلب الجهاز الانتباه من وحدة المعالجة المركزية عن طريق إصدار طلب مقاطعة.
  • استثناءات وحدة المعالجة المركزية: إذا حدث بعض شرط وحدة المعالجة المركزية غير الطبيعية، مثل تقسيم عن طريق صفر، خطأ في الصفحة، ... يقفز وحدة المعالجة المركزية مع معالج المقاطعة المقابل لذلك يمكن لنظام التشغيل أن تفعل ما يجب القيام به (إرسال إشارة إلى عملية، قم بتحميل صفحة من مبادلة وتحديث جدول TLB / الصفحة، ...).
  • مقاطعات البرامج: نظرا لأن المقاطعة تنتهي في استدعاء نواة نظام التشغيل، فإن طريقة بسيطة لتنفيذ مكالمات النظام هي استخدام المقاطعات. لكن لا تحتاج إلى ذلك، في X86، يمكنك استخدام تعليمات مكالمة إلى بعض الهيكل (نوعا ما من TSS IIRC)، وعلى Newer X86 هناك مقاعات SYSCALL / SYSENTER.

حدد وحدات المعالجة المركزية مقرها أين تقفز للنظر إلى جدول (ناقلات الاستثناء، ناقلات المقاطعة، IVT في الوضع الحقيقي X86، IDT في الوضع المحمي X86، ...). بعض وحدات المعالجة المركزية لديها ناقلات واحد مقابل المقاطعات الأجهزة، واحدة أخرى للاستثناءات وهلم جرا، ويتعين على ISR القيام ببعض الأعمال لتحديد منشئ المقاطعة. البعض الآخر لديه الكثير من المتجهات، والقفز مباشرة إلى ISRS محددة جدا.

X86 لديه 256 ناقلات المقاطعة. على أجهزة الكمبيوتر الأصلية، تم تقسيم هذه إلى عدة مجموعات:

  • 00-04 استثناءات وحدة المعالجة المركزية، بما في ذلك NMI. مع وحدات المعالجة المركزية اللاحقة (80186، 286، ...)، توسعت هذه المجموعة، متداخلة مع النطاقات التالية.
  • 08-0F هذه هي مقاطعات الأجهزة، والتي يشار إليها عادة باسم IRQ0-7. الكمبيوتر - في إضافة IRQ8-15
  • 10-1F مكالمات BIOS. من الناحية النظرية، يمكن اعتبار هذه مكالمات النظام، نظرا لأن BIOS هو جزء من DOS يعتمد على الجهاز الخرساني (هكذا تم تعريفه في CP / M).
  • 20-2F مكالمات دوس. بعض هذه تعددن، وتقديم العديد من الوظائف. الواحد الرئيسي INT INT 21H، والتي تقدم معظم خدمات DOS.
  • 30-FF الباقي، للاستخدام من قبل برامج التشغيل الخارجية وبرامج المستخدم.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top