الترقيع من CALLL عن طريق استبدال مع NOPs يعمل في الفضاء المستخدم ولكن ليس في الفضاء النواة

StackOverflow https://stackoverflow.com/questions/261021

سؤال

ولدي برنامج تشغيل الجهاز أريد أن التصحيح. برنامج تشغيل هذا الجهاز يدعو IOLog وأريد أن تخلص من قطع الأشجار.

إذا كنت محل CALLL إلى IOLog مع (وعدد مماثل من) NOPs داخل برنامج تشغيل الجهاز (kext)، تعطل النواة مع ما يشبه كومة حطم ( "المتتبع الخلفي مؤشر الإطار 0 صالح إنهاء").

ونفس الأسلوب ومع ذلك، يعمل بشكل جيد في المستخدم الفضاء (على سبيل المثال NOPping NSLogs داخل OS X ثنائي).

ما أنا في عداد المفقودين هنا؟

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

المحلول

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

لترميم على القرص، قد يكون لديك سجل نقل عن عنوان الهدف. وذلك عندما يتم تحميل برنامج التشغيل، سوف محمل حدة دينامية إصلاح عنوان IOLog في القانون، والاستعاضة عنها مع عنوان حقيقي. سيؤدي هذا إلى استبدال تعليمات NOP الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top