ويندوز 7 وضع تصحيح النواة. مبدأ مصحح بنظام التشغيل الأساسية. رموز لصواب النواة

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

قبل النظر في طرق مختلفة لتصحيح النواة، دعونا نستكشف مجموعة من الملفات اللازمة لتنفيذ أي نوع من مثل هذه الصراصير.

رموز لصواب النواة

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

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

تحميل وتثبيت الأحرف الخاصة بالإصدارات المختلفة من Windows ليست صعبة، ولكن ليس من الممكن دائما تحديث الإصلاحات للإصلاحات. أسهل طريقة للحصول على الإصدار المطلوب من أحرف تصحيح الأخطاء عن طريق الاتصال بخادم Microsoft Symer مصمم خصيصا لهذا، باستخدام بناء جملة خاص لهذا المسار إلى الرموز المحددة في المصحح. على سبيل المثال، يجعل المسار التالي للرموز تصحيح الأخطاء لتنزيل الأحرف من خادم الإنترنت Symbol واحفظ النسخة المحلية في المجلد C: \\ Symbols: SRV * C: \\ Symbols * http: //msdl.microsoft.com/download.com حرف او رمز

يمكن العثور على تعليمات مفصلة لاستخدام خادم رمزي في ملف تعليمات التصحيح أو على الإنترنت على صفحة الويب http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

  • المؤلفون:

    Barinov S.S.، Shevchenko O.g.

  • سنة:
  • مصدر:

    المعلوماتية وتكنولوجيا الكمبيوتر / المواد المؤتمر السادس الدولي للطلاب والتقنية للطلاب وطلاب الدراسات العليا والعلماء الشباب - 23-25 \u200b\u200bنوفمبر 2010، دونيتسك، دونيتو. - 2010. - 448 ص.

حاشية. ملاحظة

يتم تطبيق تحليل مقارن لتصحيح وضع المستخدم ووضع kernel على نظام التشغيل Microsoft Windows، والتمييز ومشاكل تنظيم الصراصير الأخيرة. بناء على النتائج التي تم الحصول عليها، والمتطلبات الرئيسية لبناء شعافين نظام النواة في حالة الطوارئ والتصحيح التفاعلي. تم إجراء تحليل للحلول الحالية للامتثال للمتطلبات. على وجه الخصوص، يتم إيلاء اهتمام خاص لأصحاب المصحح Microsoft Windows Debugger.

الجزء الرئيسي

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

توفر مجموعة أدوات تطوير برامج التطبيق مجموعة واسعة من الميزات. تشمل أي بيئة تطوير متكاملة إمكانية تصحيح الأخطاء دون الحاجة إلى استخدام مرافق الطرف الثالث. إذا كنا نتحدث عن البرامج النظامية وتطوير السائقين على وجه الخصوص، فهي بحكم تفاصيلها، فإن عملية التطوير صعبة للغاية ولديها آلية قليلة. جميع مراحل التطوير، بما في ذلك تصحيح الأخطاء، منفصلة. لتنفيذ كل منها، تطلب الشروط الخاصة: يتم إجراء كتابة رمز البرنامج على نظام كمبيوتر كامل التشغيل، وتصحيح الأخطاء - في نظام التصحيح، والاختبار - اعتمادا على الظروف، إلخ. نفس مصححات نظام النواة أكثر تعقيدا في التنمية، وبناء على ذلك، أقل ودية.

بشكل عام، يمكننا التحدث عن عدم تصحيح الأخطاء الأساسية. على الرغم من توفر هذه الوسائل، إلا أنها غالبا ما لا تكون ضرورية للحديث عن البدائل. على سبيل المثال، لدى مصحح الأخطاء Microsoft Windows Debugger عتبة دخول عالية جدا. يتحدث العديد من المبرمجين عن أول تجربة سلبية عند مقابلته، ومعظم إمكانياتها لا تزال محروقة.

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

    توفر المدافعات الحديثة الوظائف الأساسية التالية:
  • تصحيح الأخطاء في مستوى التعليمات البرمجية المصدر؛
  • إدارة التنفيذ
  • عرض وتغيير الذاكرة؛
  • عرض وتغيير محتويات سجلات المعالج؛
  • عرض كومة من المكالمات.

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

بموجب مراقبة التنفيذ يعني القدرة على مقاطعة وتجديد تنفيذ رمز البرنامج لتحقيق أمر محدد في رمز البرنامج. إذا تم تنفيذ رمز البرنامج في وضع خطوة بخطوة - يحدث المقاطعة لكل لغة برمجة Lexeme أو عند الخروج من الروتين الفرعي. مع التنفيذ المجاني، يحدث انقطاع الإعدام في أقسام متقدمة من التعليمات البرمجية - يتم تثبيت نقاط الإيقاف.

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

للوصول إلى ذاكرة Kernel، يجب أيضا إجراء مكونات المصحح في وضع Kernel. يؤدي هذا إلى ظهور مشكلتين في وقت واحد، وهي نتيجة واضحة لتنظيم الذاكرة في وضع المعالج المحمي.

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

الخصائص هي أنه عند إرسال مكالمات النظام، لا يقوم نظام التشغيل Windows بتبديل السياق. نظرا لهذا، يمكن لرمز وضع Kernel استخدام العنوان الظاهري لوضع المستخدم.

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

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

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

تم قبول تصحيح الأخطاء التفاعلية والطوارئ. مع تصحيح الأخطاء المحلية التفاعلية، يتم تنفيذ المصحح في نفس النظام كأداة تصحيح. مع تصحيح الأخطاء عن بعد التفاعلية، يتم تنفيذ المصحح وكائن Debug في أنظمة مختلفة. عند تصحيح رمز Kernel، يجب مراقبة النظام، بدءا من الخطوات الأولى لتنزيله، عندما لا تعمل الشبكة بعد، لذلك، تستخدم واجهات تسلسلي بسيطة، مثل COM، FireWire، USB، على توصيل الأنظمة. في الآونة الأخيرة، بسبب الاتجاهات في تطوير المحاكاة الافتراضية للبرمجيات على مستويات مختلفة من التجريدات، تنجذب الآلات الظاهرية بشكل متزايد. يقوم نظام التشغيل بالضوافة بمثابة تصحيح تصحيح، يتضمن نظام التشغيل OS واجهة مستخدم Debugger.

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

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

الوضع الرئيسي لنظام Windows Debugger هو وضع مترجم الأوامر. نظرا للهيكل المعياري، جنبا إلى جنب مع المطورين المزودين، يدعم أوامر Windows Debugger وحدات الطرف الثالث تسمى الامتدادات. في الواقع، يتم تزيين معظم الأوامر المدمجة أيضا في شكل ملحقات.

يركز نظام Windows Debugger على تصحيح الأخطاء التفاعلية والطوارئ النائية، عند استخدام جميع قدراتها. في الوقت نفسه، لا يتم دعم تصحيح الأخطاء التفاعلي المحلي الكامل: يسمح المصحح فقط بعرض بعض هياكل النواة.

هناك وحدة امتداد لأصحاب مصابيح Windows يسمى Livekd، التي تم إنشاؤها بواسطة Mark Russinianovich، والتي بمعنى ما ينفذ تصحيح الأخطاء التفاعلية المحلية. Livekd على الذهاب يخلق تفريغ من ذاكرة نظام العمل ويستخدمه لتصحيح الأخطاء.

يتم تحديث أدوات "أدوات التصحيح ل Windows" بانتظام ودعم جميع أنظمة تشغيل Windows الحديثة.

تقوم مصحح الأخطاء بروتيس Kernel، التي تنتجها Compuware في حزمة برامج Driverstudio، بديلا تقليديا إلى حزمة "أدوات تصحيح الأخطاء لنظام التشغيل Windows". كانت سمة مميزة لل Softice تنفيذ تصحيح الأخطاء التفاعلية المحلية على الأجهزة المدعومة. يمكن أن يتحكم المصحح تماما في تشغيل نظام التشغيل تقريبا.

من 3 أبريل 2006، تم إيقاف بيع منتجات الأسرة Driverstudio بسبب "العديد من المشكلات التقنية والتجارية، وكذلك الحالة العامة للسوق". الإصدار الأخير من نظام التشغيل، دعمه هو حزمة خدمة Windows XP 2. كقاعدة عامة، لا تتغير تحديثات الخدمة واجهة تطبيق نظام التشغيل، ولكن قد يخضع عدد أرقام مكالمة النظام وغيرها من المعلومات غير الموثقة يتغيرون. اعتمدت المصحح ل Softice على العناوين المنصوص عليها بشكل صارم لهياكل البيانات الداخلية. نتيجة - مع الحفاظ على صيانة حزمة الخدمة 3 تم كسر التوافق. من الواضح أن إصدارات أكثر لاحقا من نظام التشغيل Windows غير مدعوم أيضا.

Syser Kernel Debugger تم إنشاؤها بواسطة شركة صينية صغيرة Sysersoft كإعداد لإصحاب Softice. تم إصدار النسخة النهائية الأولى في عام 2007. مثل Softice، يستطيع مصحح Syser Kernel Debugger إجراء تصحيح الأخطاء التفاعلية في نظام التشغيل. المدعومة هي إصدارات 32 بت فقط من الإصدارات الحديثة من Windows.

في الوقت الحالي، يعد Windows Debugger الأداة الرئيسية بين مطوري وحدات Kernel. كما يستخدم فريق تطوير نظام التشغيل Windows التشغيل Windows.

cPP OLEPFPT جدولة Hlbbebeus RP TBVPFFFU في PFMBDLPK SDTB في BTBTKYKY DBNRBNY RBNSFY. Lbn Rtbchymp، Chbn Okhtsop vkdef obbdbfs pdop yuy khuftspufch rpdlbüli، webcme retauyuyuyui / etc / fstab. UPTPU PVTBFCF RBNSFY على Hufpkufchb، OE Scamsayus Huftspufchby Rapdlbüli، أوتيني، Mephisp، H Sleaner Npnofof OE Rapdabychbafus.

ملحوظة: yurpmshkfa lpnbodh. dumpon (8) DMS Chlbobyus SDTX Street، Zej Okhtsop Upbosfsh Bchbtchchch. rpume fittply rp lpnbode swapon (8) tbdemb rpdlbyl dpmtsob vssfshbbbbbrtrtbnnb dumpon. pvshupup lfp chrchrpostopus кабдбуененен ресеенопк dumpdev h zbkme rc.Conf (5) وبعد emuy bdbdbob lfb resetoobs، fp rpume ohps rty retchpk nopzprmshpchbfemshulpk retebzthelely vkhdaf bchpngfyyuely obbrheeob rtpztbnnb saveecore (8) وبعد BCNR Bchbtkokok DBNR SDTB H LBFBMS، بدباتير HT Retenopc Dumpdir Zbkmb Rc.conf. RP Khnpmyuba lbfbmpn dms bchbtky dbnrph scmsefus / var / تحطم.

mivp chist npseff cbdbfs huftpkufchp dms ottpub pvtbbbby schopa utail retail rbtbnext تفريغ h uftple config lpzztbgypopzp zbbkmb chbesp sdtb. fblpk urrupv yurpmshpchbffsh oe telpneodhefus على dpmtseo yurpmshpchbfshus، fpmslp emuy chister ipfife rpmkhyubfsh btbtykhots pvtbtp rbnsfy sdtb، lpftpp btbtykop bcheteffaf tbvffh rty obbzth.

ملحوظة: DBME FETALLO GDB PEDOBYBEFEF PFUMBDYUIL GDB، Obrechoeosobhe HL` `Thesin Pfambdles SDTB". RFPF Tecin dpufyzbefus obrkulpn GDB في RBTBNEFPN -K. H tecine pfmbdly sdtb gdb yena دراسات المدرسة حول (KGDB).

نصيحة: Emum Chist Yurpmsshefe FreeBSD Chetuy 3 YMI NMEA TOOAA، Chheeyueye Pfldpyopsp SDTB LPBODPK قطاع، B OE HUFBOBCHBFFSH VSSHPE PFLDPYOPE SDTP:

# cp kernel kernel.debug # الشريط -G نواة

lFPF IBZ OE FBL HTS Opepvipdine، OP TVPNeiodh. (PE فري 4 J VPMEE RPDOYI TEMYBI FPF YBZ CHSCHRPMOSEFUS BCHFPNBFYYUEULY H LPOGE RTPGEUUB RPUFTPEOYS SDTB جعل). LPZDB RAS HUEYUEOP، BCHFPNBFYYUEULY YMY RTY RPNPEY LPNBOD CHSCHYE، BL NPTSEFE HUFBOPCHYFSH EZP PVSCHYUOSCHN PVTBPN، جعل OBVTBCH تثبيت.

babnefshet، Yufp H Ufbitschi Chetuyi FreeBSD (DP 3.1، OE Chlmayubs LFPF Temm)، Yurpmshhefus SDTB H Zhpstnbfe A.OUT، Ripfpnh يي FBVMYGSK UINCHPMPCHUS RPUFSOPSPC H RBNSFY. في vpmshiktkin fbvmygegk uinchpmpc h oe hueyuyoopn pfampuopop sdte lfb ymyyoss ftbfb. مواضيع Rpumedayee من Freepsd Yurpmshhaf SDTB H Zhptnbfe ELF، ZEA LFP OE SCMSEFUS RTPVEMPK.

eUMY BL FEUFYTHEFE OPCHPE RAS، ULBTSEN، OBVYTBS YNS OPCHPZP SDTB RTYZMBYEOYY BZTHYUYLB W، OP CHBN OHTSOP BZTHTSBFSH J TBVPFBFSH ديك DTHZYN SDTPN، YUFPVSCH UOPCHB CHETOHFSHUS A OPTNBMSHOPNH ZHHOLGYPOYTPCHBOYA، BZTHTSBKFE EZP FPMSHLP B PDOPRPMSHPCHBFEMSHULPN TETSYNE RTY RPNPEY ZHMBZB -s، HLBSCHCHBENPZP RTY BZTHLE، B obbfen khshchpmife flye sbzy:

# fsck -p # mount -a -t ufs # لذا فإن نظام الملفات الخاص بك ل / var / تحطم هو قابل للكتابة # Savecore-Kernel.panicked / var / crash # مخرج # ... إلى متعدد المستخدمين

bFB RPMEDPCHBEMSHOFFS HLBCHBFF RTPZTBNN saveecore (8) حول yurpmshptbe dthezpzp sdtb dms yuchmeyuyuyuyuyus yehno. Yobyuyk vekdef yurpmshpchbfs sdtp، tbvpfbaee h tb npneoph، ulptee chuzp، oyuzp oe ultmbef، rpfph ufp btbtkokksk rbnsfy y uinchpmsk sdtb vhdhf pfmyubfsus.

ب firth، rpume utipub btbtykopp dbnrb، retekdife h lbfbmbs / sys / compile / أيا كان y bromhufyfe lpnbodh gdb -k. Ya Rtpztbnch GDB UFP SPF UFP:

Symbol-file kernel.debug exec-file /var/crash/kernel.0 core-file /var/crash/vmcore.0 th chbms - Chists npsef pfmbcychbfs btttkom dbnr، yurpmshks yuipdocke felufshs sdtb fpuop fpupfe، ll chiste mavpk dthezpk rtpztbnnpk.

cHPF TSKTOBM LPNBO OBEBUB TBVPFSH GDB، YMMUFTHAKEK BFH RTPGedcht. DMYO-Vostthply vshmy tbptchbs dms hmkhyuyus yufbvemshopufy dmsu dms hdpvufchb sftply wills rtpokhnet المواد اللاصقة. Chuu pufbmshop scmsefus ftbuyttpchlpk poyvly، tebmshop chpyulokhchyk chp tbets tbvpfshd dtbchtpn lpopmy pcvt.

1: Script بدأت في FRI DEC 30 23:15:22 1994 2: # CD / SYS / COMPILE / URIA 3: # GDB -K Kernel /var/crash/vmcore.1 4: قراءة بيانات رمز القراءة من / USR / SRC / SYS / COMPILE / URIAH / KERNEL ... القيام به. 5: IDLEPTD 1F3000 6: الذعر: لأنك قلت ل! 7: ثنائي الفينيل متعدد الكلور الحالي في 1E3F70 8: القراءة في الرموز ل ../....I386/I386/machdep.c...done. 9: (kgdb) حيث 10: # 0 التمهيد (arghowto \u003d 256) (../..I386/I386/MachDep.c 767) 11: # 1 0xf0115159 في الذعر () 12: # 2 0xF019555BD في Diediedie ( (../../i386/i386/machdep.c خط 698) 13: # 3 0xf10185e في db_fncall () 14: # 4 0xf101586 في db_command (-266509132، -266509516، -266509516، -267381073) 15: # 5 0xf101711 في DB_COMMAND_LOOP () 16: # 6 0xf01040a0 في db_trap () 17: # 7 0xf0192976 في kdb_trap (12، 0، -272630436، -266743723) 18: # 8 0xF019D2EB في Trap_Fatal (...) 19: # 9 0xf019C60 في Trap_Pfault ( ...) 20: # 10 0xf019cb2f في فخ (...) 21: # 11 0xf01932a1 في استثناء: Calltrap () 22: # 12 0xf0191503 في Cnopen (...) 23: # 13 0xf0132c34 في spec_open () 24: # 14 0xf012d014 في VN_OPEN () 25: # 15 0xf012a183 في Open () 26: # 16 0xf019d4eb في Syscall (...) 27: (KGDB) UP 10 28: القراءة في الرموز ل ../..I386/I386 /trap.c...done. 29: # 10 0xF019CB2F في فخ (إطار \u003d (TF_ES \u003d -260440048، TF_DS \u003d 16، TF_ \\ 30: EDI \u003d 3072، TF_ESI \u003d -266445372، TF_EBP \u003d -272630356، TF_ISP \u003d -27 \\ 31: 2630396، TF_EBX \u003d - 266427884، TF_EDX \u003d 12، TF_ECX \u003d -266427884، TF \\ 32: _AEX \u003d 64772224، TF_TRAPNO \u003d 12، TF_ERR \u003d -272695296، TF_EIP \u003d -272695296، TF_EIP \u003d -26 \\ 33: 6672343، TF_CS \u003d -266469368، TF_EFLAGS \u003d 66066، TF_ESP \u003d 3072، TF_ \\ 34: SS \u003d -266427884)) (../..../I386/I386/Trap.c Line 283) 35: 283 (فراغ) Trap_Pfault (& Frame، False)؛ 36: (KGDB) إطار الإطار-\u003e TF_EBP Frame-\u003e TF_EIP 37: القراءة في الرموز ل ../..i386/isa/pcvt/pcvt_drv.c...done. 38: # 0 0xf01ae729 في PCOPEN (DEV \u003d 3072، Flag \u003d 3، الوضع \u003d 8192، P \u003d (بنية P \\ 39: ROC *) 0xf07c0c00) (../../1/..I386/isa/pcvt/pcvt_drv.c 403) 40: 403 العودة ((* linkw.l_open) (dev، tp))؛ 41: (KGDB) قائمة 42: 398 43: 399 TP-\u003e T_STATE | \u003d TS_CARR_ON؛ 44: 400 TP-\u003e T_CFLAG | \u003d Clocal؛ / * لا يمكن أن يكون مودم (:-) * / 45: 401 46: 402 #IF PCVT_NETBSD || (PCVT_FREEBSD\u003e \u003d 200) 47: 403 العودة ((* sloursw.l_open) (dev، tp))؛ 48: 404 # # 49: 405 العودة ((* sloursw.l_open) (dev، tp، العلم))؛ 50: 406 #endif / * pcvt_netbsd || (PCVT_FREEBSD\u003e \u003d 200) * / 51: 407) 52: (KGDB) طباعة TP 53: القراءة في الرموز ل ../..I386/I386/Cons.c...done. 54: $ 1 \u003d (هيئة TTY *) 0x1bae 55: (KGDB) طباعة TP-\u003e T_Line 56: $ 2 \u003d 1767990816 57: (KGDB) UP 58: # 1 0xF0191503 في Cnopen (dev \u003d 0x00000000، العلم \u003d 3، الوضع \u003d 8192، ص \u003d (ST \\ 59: قربات PROC *) 0xf07c0c00) (../..I386/I386/Cons.c Line 126) 60: العودة ((* cdevsw.d_open) (dev، العلم، الوضع، ص))؛ 61: (KGDB) UP 62: # 2 0xF0132C34 في Spec_Open () 63: (kgdb) up 64: # 3 0xf012d014 في vn_open () 65: (kgdb) up 66: # 4 0xf012a183 في Open () 67: (kgdb) أعلى 68: # 5 0xf019d4eb في Syscall (الإطار \u003d (TF_ES \u003d 39، TF_DS \u003d 39، TF_EDI \u003d \\ 69: 2158592، TF_ESI \u003d 0، TF_EBP \u003d -272638436، TF_ISP \u003d -272629788، TF \\ 70: _EBX \u003d 7086، TF_EDX \u003d 1، tf_ecx \u003d 0، tf_eacx \u003d 5، tf_trapno \u003d 582، \\ 71: tf_err \u003d 582، tf_eip \u003d 75749، tf_cs \u003d 31، tf_eflags \u003d 582، tf_esp \\ 72: \u003d -272638456، TF_SS \u003d 39) ( ././i386/i386/trap.c خط 673) 73: 673 خطأ \u003d (* callp-\u003e sy_call) (p، args، rval)؛ 74: (KGDB) UP 75: تم تحديد الإطار الأولي؛ لا يمكنك أن ترتفع. 76: (KGDB) إنهاء 77: # مخرج 78: مخرج 79: 80: نص البرنامج النصي في FRI DEC 30 23:18:04 1994

lpndefbty l chtchtobmh:

SFTPLB 6:

lFP DBNR، CHSFSHK RTY RPNPEY DDB (UNPFT OSET)، RPPPNH LPNNEFBTYK L BCHBTYKOKOPHOPH PUFBOPCH YNEF Yneoop Chede `` لأنك قلت ل! "" ftbuyttpchlb ufelb zmhvplb؛ PDOBLP YEBUBYUBMSHOPK RTYUYUPK Reteypdb H DDB Linchem Btttbekobs Pufbopchlb Rty Spyohophea Poyvly Uftbugshchchy Rbnsfy.

SWFLB 20:

lFP Trep () H Ftbuyttfchle Ufelb.

SWFLB 36:

rtyohdifemshope yurpmshptoma orthrch zabugshchchy ufelb؛ Feretsh LFP OE Okhtsop. Rterppzubafus، Yufp Ztbugshchs Ufelb Chlbzhchbaf حول RTBCHIMSHOPE TBBRPMPSEYE، DBCU H UMKHYUBI BTBTYKOPP PUFBOCHB. ZMSDS حول UFTPLH YUIPDOPP PDB 403، NPSOP Ulbbfsh، Yufp Ceushnb Chetpsfop، Yufp Mivp Cheopchbf DPUFHR RP Hlbbfema `TP" "، MyVP VSHSHPD KBA Zubugshb NBUYCHB.

SWFLB 52:

rpipce، Yufp Cheopchbf Hlbbemsh، OP على Scmsefus Dprhufinshn Bdteup.

SFTPLB 56:

pDOBLP، Puehuydop، Yufp على Chlbchchchubf حول Nhepta، FBL YUFP NSH مطاحن OBY Brofly! (DMS FAITY، LFP OE TBLPN في LFPK Yubufsha LPDB: TP-\u003e T_Line Umkhtsyf DMSO ItemsOyois TTSINB LBOBBM LPOPMSHPZP HUFTSPUFCHB، TH IFP DPMCOP VSSFS DPUFBFUPU NBMoochlup Gempa Yuyump.)

كيفية إطلاق مصحح الأخطاء النواة؟

إجابة ماجستير:

في عملية تطوير البرمجيات، هناك عنصر واحد مهم للغاية - وهذا هو تصحيح الأخطاء. فيما يتعلق برامج التطبيق، يتم تنفيذها عن طريق العمل في وضع المستخدم وغالبا ما تكون مضمنة في IDE. من أجل أن تكون قادرا على الانحراف، على سبيل المثال، يجب إطلاق برنامج تشغيل مصحح Kernel.

تحتاج إلى تشغيل معالج أمر CMD. افتح قائمة "ابدأ" على شريط المهام. في النافذة التي تظهر، انقر فوق "تشغيل ...". تظهر نافذة "برنامج البداية". في مربع النص، أدخل CMD، ثم انقر فوق الزر "موافق".

الآن قم بإنشاء نسخة احتياطية من ملف Boot.ini. أولا اكتشاف مسار التثبيت للنسخة الحالية من Windows باستخدام الأمر: Echo٪ systemroot٪

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

لإزالة قائمة خيارات التنزيل الحالية، استخدم الأمر BOOTCFG / QUERY. عرض القائمة وتحديد هذا البند على أساس سيتم إنشاء إعدادات جديدة مع إمكانية تصحيح الأخطاء في وضع kernel. يجب تذكر معرف سجل التمهيد.

استخدم الأمر bootcfg / copy لإنشاء سجل التمهيد. من أجل تحديد معرف التسجيل الذي ستقوم بنسخه، استخدم المعلمة / ID. باستخدام المعلمة / D، قم بتعيين اسم التسجيل الذي سيتم عرضه. الآن تحتاج إلى العودة إلى قائمة خيارات التنزيل باستخدام الأمر bootcfg / الاستعلام، وإلقاء نظرة على معرف الدخول الإضافي.

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

إذا كنت ترغب في تنفيذ تصحيحات عن بعد مع اتصال الكمبيوتر الهدف عبر منفذ COM إلى الجهاز المضيف، فاستخدم خيارات / المنفذ وخيارات BAW لتحديد رقم المنفذ ومعدل الصرف.

إذا كنت تقوم بالتصحيح عن بعد من خلال كبل FireWire (IEEE 1394)، فمنتج من أجل تمكين الوضع المناسب، استخدم خيار / DBG1394 وحدد خيار رقم القناة / الفصل.

للتأكد من إجراء التغييرات، تحقق من التمهيد باستخدام الأمر bootcfg مع المعلمة / الاستعلام. عن طريق وضع أمر الخروج، أغلق نافذة معالج الأوامر.

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

قم بإجراء جهاز كمبيوتر لإعادة التشغيل. حدد تحميل مع مصحح الأخطاء. قم بتسجيل الدخول إلى النظام وابدأ العمل على الجهاز المستهدف أو بدء تشغيل تصحيح الأخطاء عن بعد. استفد من وسائل WINDBG و KD.

تعد المخادعين اللائقين على المستوى النووي وتحت النوافذ قليلا، وفي لينكس يمكن حسابها على أصابع يد واحدة، وأولئك الأكثر نموا أو غير مكتملة أو المهجورة والمتطور ... اليوم سنتحدث عن الأكثر شعبية والأكثر إثارة للاهتمام منهم -
طرف..

مقدمة

كيف يمكنك تخمين العنوان، طرف. - هذا هو "ميناء" غير رسمي من الأسطوري
Softice تحت Linux.، حفظ الواجهة ونظام الأوامر ومعظم ميزات الأخيرة: النيران مفتاح الساخنة (في طرف. هذا هو ) تثبيت نقاط توقف الأجهزة لجميع الوظائف ومكالمات النظام؛ عرض GDT / LDT / ITT، صفحات الذاكرة الفعلية؛ ميزات مستعارة من GDB (استدعاء الدالة التعسفية دعوة، وتوفير / استعادة سياق السجلات والمتغيرات الداخلية وغيرها).

على عكس معظم المدافعين الآخرين الذين يعملون من خلال Univreternal والكشف عنها بسهولة عن طريق الدفاع، فإن آلية PTTRACE (أنظمة Windows-Treatug_Process المستخدمة من قبل مصحح الأخطاء التطبيقي)، طرف. يستخدم تتبع أصلي، كما هو الحال في Softice، والذي يسمح للضابطين بتصحيح البرامج المحمية التي لا تتعامل بها الآخرون.

في الواقع، هذا لا يوجد منفذ (وبالتالي، ونقلت)، ولكن مشروع مستقل مكتوب من نقطة الصفر وتوسيع نطاق النصوص المصدر مجانا (من Softice هناك إلهام فقط). كان الجزء الرئيسي من الكود، المقصود عن 2.4 نواة، كتبه فتاة غوران الألمانية، لكن أشخاص مختلفين تماما كانوا يشاركون بالفعل في دعم الأساسي 2.6: دانييل رزنيك، بيتر ك. وكارلوس مانويل دوكلوس فيرغارا. ومؤثراتنا - OLEG Khudakov - إعادة كتابة ملفات المجمع مع NASM "وعلى
مجلس التعاون الخليجي.

تكمن النصوص المصدر على الموقع الرسمي للمشروع -
Linice٪ 0A..com "\u003e www.linice.com، هناك وثائق، أسئلة وأجوبة قصيرة وصلة للمنتدى
Linice٪ 0A."\u003e المجموعات .google.com/group/linice. لا توجد تجمعات ثنائية جاهزة.
فتح مبشئو المشروع حسابهم الخاص على المصنف، ولكن تم وضعه لوضع أي ملفات على ذلك، وتقديم 3 لقطة شاشة فقط على المراجعة "وجودة منخفضة للغاية:
.

متطلبات النظام

احدث اصدار طرف. يرتدي رقم 2.6 ويعود تاريخه إلى 28 يونيو 2005، ودعم وضع 2.4.x Kernel و Console VGA. لوحظ مشاكل خطيرة مع النوى الأحدث، و 2.6.x kernel مدعومة فقط في وضع محدود.
تم تطوير المصحح واختباره تحت ديبيان 2.6. لا يتم ضمان توافقه مع بقية التوزيعات التي يجبرنا على اللجوء إلى الدف، ولكن في بعض الحالات لا يساعدها والدفور. في الواقع تبقي على آلة دبيان الخاصة بك فقط للعمل مع طرف.، - إنه أمر طبيعي تماما. منذ وقت طويل، عندما لم يكن تنفيذ بروتيس ل NT غير موجود بعد، قام العديد من المتسللين بتثبيت 9x فقط لكسر البرنامج، على الرغم من أنهم جلسوا تحت
NT. لأنها مغطاة جميع الدقيقة للتثبيت طرف. ضمن مقال واحد، فإنه غير واقعي غير واقعي، سأحد من وصف عملية التجميع وإطلاقها. طرف. ضمن مجموعة توزيع محددة واحدة - Knoppix 3.7 مع 2.4.1 الأساسية في وضع وحدة التحكم VGA.
طرف. يدعم آلات ACPIS و Multiprocessor الآلات، ولكنها صديقة للغاية مع X "MI، خاصة على بطاقات الفيديو بخلاف NVIDIA. عمق الألوان 24 بت. لا ينظر،" هضم "8 و 16 و 32 بت، لذلك تصحيح X التطبيقات أكثر ملاءمة للقيادة من خلال محطة عن بعد متصلة عبر منفذ COM على بروتوكول VT100. في هذه الحالة، ستعمل لوحة المفاتيح المحلية أيضا معها
طرف.!

تجميع وتكوين طرف

قم بتنزيل أرشيف Gzip للنصوص المصدر www. طرف..DEVIC.US / طرف.-2.6.tar.gz، الذي يحتل أقل قليلا من ميغابايت، قم بفك الضغط عليه على القرص، انتقل إلى الدليل. / مستندات من وإلى ملف README، ومعرفة أن تجميع مصحح الأخطاء تحت Kernel 2.4 يتم تنفيذها مثل هذا:

# cd build.
# ./make_bin-2.4.
# cd ../bin.
# جعل نظيفة؛ ماك.هيا

ومع ذلك، قبل البدء، يجب عليك فتح الملف. / bin-2.4 / makefile وتحرير السلسلة الهدف وفقا للتكوين والهندسة المعمارية للمنصة المستهدفة. على وجه الخصوص، على آلات ACPI مع معالجات متعددة النواة أو فرط التصدير، ستبدو مثل هذا:

الهدف \u003d -dsmp -dio_apic

بعد الانتهاء من التجميع في الدليل. / ستكون هناك العديد من الملفات والدلائل، ولكنها كبيرة منها هي:

linsym هي وحدة التمهيد Debugger؛
Linince.dat - ملف التكوين؛
Xice - دعم X "OV، عند العمل في وضع النص، يمكنك حذفه؛
./linice_2.4.27/linice.o - وحدة النواة المحملة التي تحتوي على مصحح الأخطاء نفسها مباشرة.

عملية التجميع طرف.

من خلال جمع مجموعة العمل الصغرى، سيكون من الجيد الحصول على كل شيء آخر - أمثلة Demo Debug الموجودة في الدليل. / اختبار وتركيبها بواسطة البرنامج النصي COMPALE، وكذلك وحدة التوسع (في رأينا، البرنامج المساعد) ملقى في الدليل . / ext التي تم جمعها بواسطة الأمر الرئيسي ويمكن تحميله من قبل أمر Insmod. لا فائدة منه، ولكن بعد أن درس النص المصدر، سنكون قادرين على كتابة وحداتهم الخاصة توسيع الوظائف
طرف..

عند تشغيل Knoppix "وفي السطر السفلي من الشاشة، تظهر دعوة" التمهيد: "حيث تحتاج إلى إدخال" Knoppix 2 VGA \u003d Normal ". رمز الغش" Knoppix "يختار 2.4 Kernel (تحميل تلقائيا افتراضيا، لذلك Knoppix يمكن تخفيضها)، "2" يحظر تحميل X "OV، و" VGA \u003d Normal "تعيين وضع VGA القياسي بدقة 80x25.

بعد انتظار التنزيل، قل "SU"، ثم "Passwd" وأدخل كلمة مرور جديدة للجذر "A، والتي بموجبها تذهب فورا إلى النظام، باستخدام أمر تسجيل الدخول. إذا لم يتم ذلك، فإن محاولة البدء طرف. ينتهي بفشل سحق مع الصراخ "خطأ تجزئة".

عند تنزيل KnopPix "ومن القرص الثابت (يمكنك تثبيت الأمر" Sudo Knoppix-Installer "، سجل في نافذة المحطة الطرفية من أسفل جلسة LIVECD)، ستظهر قائمة ابدأ بقائمة النوى المتوفرة. حدد Linux (2.4) -1 وانقر لتحديد معلمات التنزيل - "2 VGA \u003d Normal". لا تحتاج كلمة "knoppix" إلى الكتابة، لأن النواة مختارة بالفعل. بعد اكتمال التنزيل، نقدم الأمر تسجيل الدخول وأدخل نظام الجذر "أوم (يفترض أن الحساب قد تم إنشاؤه سابقا).

يقوم الأمر بإطلاق المصحح من قبل الأمر. / Linsym -، وبعد ذلك يظهر على الفور على الشاشة. إذا لم يحدث هذا، فحاول تحديد مفتاح "- SaveBose 3" لعرض رسائل التشخيص.
قد يكون أحد أسباب فشل التنزيل هو عدم وجود ملف /boot/system.map الذي يحتوي على عنوان الوظائف النووية. فشل تنزيل وإذا لم يكن محتويات System.Map لا يتطابق مع النواة الحالية، فقد يحدث، على سبيل المثال، أثناء إعادة تنصيبه. بعض محطات الترجمة من التوزيعات أو لا تشمل SYSTEM.MAP على الإطلاق (اعتقادا على أنها ستعزز أمن النظام، لأن Rootkit "سيكون أكثر صعوبة اعتراض SYSCALL"، أو يتم وضعه هنا شيء متبقي تماما وغير مفهوم من حيث يستغرق. في مثل هذه الحالات، يكفي فقط إعادة ترجمة Kernel، وتحديد مسار المصحح إلى ملف SYSTEM.MAP باستخدام المفتاح "-M"، إذا لم يكن في / تمهيد، وفي مكان آخر. وبالتالي، فإن السلامة لا تعاني، و طرف. يمكن أن تعمل!
العودة من المصحح إلى النظام يحدث أو بمساعدة "X " مزيج يسبب مصحح من أي برنامج. ومع ذلك، فليس في كل الحقيقة أننا موجودون في سياقها، لأن Linux هو نظام تعدد المهام، وتحويل العمليات واحدة تلو الأخرى، وأوامر addr (سياقات التبديل) في المعجم طرف. لا يزال غير موجود، وعندما يظهر - غير معروف. لذلك، من الضروري المريض، وضع نقاط التوقف لمكالمات النظام المستخدمة من خلال برنامج معين، أو اختراق عملية INT 03H، والتي سنتحدث الآن.

لإلغاء تفريغ المصحح (إذا كان يريد حقا إلغاء تحميل) يجيب على المفتاح "-x"، الذي يحيله نفس Linsym "Y.

أساسيات العمل S. طرف.

بالنسبة لأولئك الذين عملوا بالفعل مع Softice، اتقان طرف. لن تكون هناك مشكلة. يتم استخدام جميع الأوامر نفسها هنا: D - تفريغ الذاكرة، تحرير الذاكرة الإلكترونية، T - T - Step-Step Trace، P - تتبع دون إدخال الوظيفة، R - عرض السجلات / تعديل السجلات، BPM / BPX - تعيين نقطة التوقف / تنفيذ الذاكرة وغيرها. يتم احتواء قائمة كاملة من الأوامر في التعليمات المدمجة التي تم استدعاؤها حسب المساعدة (بالمناسبة، "اسم المساعدة" يعطي معلومات إضافية على الفريق) وفي وثائق الموظفين.

دعنا نقر ونحن نصل إلى قائمة العمليات المعروضة على شاشة الأمر PROC، ويتم تمييز العملية الحالية باللون الأزرق:

: بروك.

1 0000 C1C3E000 النوم 0 0 INIT
2 0000 F7EE8000 النوم 0 0 KEVEDD
3 0000 F7EE2000 النوم 0 0 ksoftirqd_cpu0
4 0000 F7ee0000 النوم 0 0 ksoftirqd_cpu1
5 0000 F7ED0000 النوم 0 0 KSWAPD
6 0000 F7EAA000 النوم 0 0 BDFlush
7 0000 F7EA8000 النوم 0 0 Kupdated
56 0000 F6A36000 النوم 0 0 KJOURNALD
1006 0000 F7A34000 تشغيل 0 0 Automount
1013 0000 F68E6000 النوم 0 0 Cupsd
...
1105 0000 F6DDE000 النوم 0 0 MC
1106 0000 f6dd4000 النوم 0 0 cult.saver

العمليات، بالطبع، جيدة، ولكن كيف لا نزال تصحيح البرامج؟ أبسط شيء هو توصيل نقطة إدخال آلة CCH، مما يتوافق مع تعليمات INT 03H، بعد كتابة محتويات البايت الأصلية. يمكن القيام بذلك من قبل أي محرر HEX، على سبيل المثال، ذكرت مرارا وتكرارا.
HTE.

عن طريق تنزيل الملف إلى المحرر، انقر فوق (الوضع)، اختر ELF / IMACE، وتخصيص المؤشر إلى نقطة الدخول:، DAVIM (تحرير) وتغيير البايت الأول على CCH، ونحن نقوم بحفظ التغييرات (حفظ) والخروج. عند بدء برنامج تدريجي طرف. ينبثق فورا، منزعج من الاستثناء الناتج عن CCH، وبعد ذلك يشير EIP إلى النهاية
cch.

شرط البرنامج مع نقطة الدخول لفترة طويلة في وقت مصحح الأخطاء

0023: 080482C0 CC INT 3
0023: 080482C1 إد في EAX، DX
0023: 080482C2 5E البوب \u200b\u200bESI
0023: 080482C3 89E1 MOV ECX، ESP

يشير المؤشر إلى الإرشادات الموجودة في EAX، DX (EDH)، وهي جزء من أمر Patched EBP، EBP (31H EDH) الأمر. الآن (من الناحية النظرية)، يجب أن نستعيد البايت الأصلي عن طريق تغيير نظام التشغيل CCH إلى 31 ساعة، والحد من سجل EIP لكل وحدة واستمر في البحث في الوضع العادي.

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

أتذكر القيمة الحالية لسجل EIP؛ انسخ الجهاز المصحح إلى أعلى المكدس؛ نحن استعادة البايت cch هناك؛ ننقل التحكم في ذلك عن طريق تغيير قيمة EIP؛ ننفذها عن طريق تنفيذ قانون تتبع واحد؛ والعودة EIP إلى المكان، أي إلى الجهاز التالي:

استعادة البايت الأصلي تم استبدالها بواسطة تعليمات INT 03H

؛ نحن ننظر إلى الجزء العلوي من المكدس (من الفضول النقي).
: D ESP-10
0018: BFFFFC0 C0 82 04 08 00 00 00 00 5D 0C 00 40 DC EF FF BF

؛ انسخ أمر الجهاز المؤكدا إلى أعلى المكدس.
؛ الرقم 10H هو الحد الأقصى للحجم المحتمل لأمر الجهاز على X86.
: M EIP-1 \u200b\u200bL 10 ESP-10

؛ نحن ننظر إلى كيفية تغير المكدس.
: D ESP-10
0018: BFFFFEC0 CC ED 5E 89 E1 83 E4 F0 50 54 52 68 F0 85 04 08

؛ بلى! تم تغيير المكدس حقا، حان الوقت لتصحيح CCH إلى 31 ساعة.
: E ESP-10 31
تحرير البيانات الفورية غير المنفذة حتى الآن.

؛ وجه الفتاة! لم يتم تنفيذ التنازل المباشر للبيانات في طرف البطاقة،
؛ ولكن يمكننا تعديل تفريغ في الوضع التفاعلي (أيضا
؛ كما هو الحال في Softice) أو إعطاء الأمر f ESP-10 L 1 31، تأخذ في الاعتبار فقط
؛ ما، على عكس اللفاع، لا يقوم مصحح Linice Debugger بعدم تحديث نافذة التفريغ،
؛ لذلك، بعد تنفيذ الأمر قد يبدو ذلك
؛ لا نتيجة؛ في الواقع، لا يستحق التحديث
؛ فريق تفريغ D ESP-10، وكل شيء سوف يقع في مكانه.

؛ نحن ننقل التحكم في الأمر نسخ إلى المكدس،
؛ نتذكر قيمة سجل EIP.
: ص EIP (ESP-10)
Reg: EIP \u003d BFFFFCC0

؛ جعل عمل تتبع واحد.
: ر.
0023: BFFFFCC2 5E البوب \u200b\u200bESI

؛ كما نرى، زاد تسجيل EIP بنسبة 2 (bfffeffc2h - bfffefc0h) \u003d 02h،
؛ وبالتالي، فإن عنوان الأمر التالي هو: 080482C1H - 01h + 02h \u003d 080482C2H،
؛ حيث 080482C1H هي القيمة الأولية ل EIP عند إدخال البرنامج، 01H - حجم INT 03H.

؛ قم بتثبيت EIP على الأمر بعد التعليمات التقدمية.
: ص EIP 80482C2
Reg: EIP \u003d 80482C2

هذه هي رقصات مع الدف يجب أن ترتب. و ما العمل؟ لذلك، مع تحميل البرامج في مصحح الأخطاء، اكتشفنا الآن، الآن يتم تشديدنا من خلال نقطة توقف مكالمات النظام والوظائف النووية.

يعرض أمر إكسب الأسماء التي تم تصديرها بواسطة القلب، أي منها يمكن أن يظهر في تعبيرات، على سبيل المثال، "BPX DO_BKR" يعادل "BPX C012C9E8".

انسحاب الأسماء المصدرة من قبل جوهر

: إكسب
نواة
C0320364 MMU_CR4_FEATURES.
C02AC3A4 acpi_disabled.
C02AC8A0 I8253_LOCK.
...
C012BDA8 DO_MMAP_PGOFF.
C012C764 DO_MUNMAP.
C012C9E8 DO_BRK.
C011E990 Exit_mm.
C011E69C Exit_Files.

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

من المعروف أن جدول مكالمات النظام هو صفيف من الكلمات المزدوجة بدءا من عنوان SYS_CALL_TABLE (يتم تصدير هذا المتغير إلى Kernel).

جدول مكالمة النظام

؛ نقل المصحح إلى وضع عرض الكلمات المزدوجة.
: DD.

؛ خذ الجدول على الشاشة.
: D sys_call_table.
0018: C02AB6A8 C0126ACM F8932650 F89326A0 C013DC10
0018: C02AB6B8 C013DD18 C013D5C8 C013D724 C011F3BC
0018: C02AB6C8 C013D664 C014A8E0 C014A3B4 F893020C

يطابق كل عنصر من عنصر الجدول مكالمة نظامه، ولكل مكالمة رقمها الخاص الذي يمكن العثور عليه من خلال النظر في ملف /usr/include/sys/syscall.h، ولكن من الأفضل القيام بذلك تحت Linux، حيث لا يوجد الأرقام المباشرة، ولكن الاقتراض أن نفس الملف من BSD هو كل نفس عدد مكالمات النظام الرئيسي على جميع الأنظمة تتزامن. على وجه الخصوص، يدرك نظام الاتصال المفتوح في رقم 5.

لتعيين نقطة التوقف عند فتحها، تحتاج إلى معرفة عنوانها الموجود في الكلمة المزدوجة الخامسة من جدول مكالمات النظام، والعد من الصفر، والتساوي (في هذه الحالة) C013D5C8H.

تحديد نقطة التوقف على مكالمة النظام المفتوح

؛ قم بتثبيت نقطة التوقف في مكالمة النظام المفتوحة،
: BPX C013D5C8.
؛ يخرج من المصحح،
: X.
...
# فتح بعض الملفات
...
؛ المصحح ينبثق على الفور، ويخبرنا عن ذلك،
: نقطة توقف بسبب BPX 01

؛ دع بروك القيادة للتأكد من أننا مثبتة في العملية الخاصة بك.
: وكيل
PID TSS مهمة الدولة uid gid اسم
1049 0000 F6364000 النوم 0 0 Getty
1145 0000 F61CC000 النوم 0 0 MC
1146 0000 F614A000 النوم 0 0 cult.saver

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

استنتاج

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