برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة: Kernel-mode Programming #1 - برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة

اقفز إلى الموضوع

  • (2 صفحات) +
  • 1
  • 2
  • لا تستطيع بدء موضوع جديد
  • لا تستطيع الرد على هذا الموضوع

Kernel-mode Programming #1

#1 العضو غير متواجد حاليا   GamingMasteR 

  • مشرف قسم الأسمبلي سابقاً
  • PipPipPipPip
  • المجموعة: اعضاء
  • المشاركات: 1545
  • الإلتحاق: 14-February 07
  • الجنس:ذكر
  • الوسام

  • الدولة :

السمعة: 49
جيد

أيقونة المشاركة  تمت المشاركة 08 February 2009 - 02:45 AM

السلام عليكم ورحمة الله وبركاته



في أول درس لنا سنتعلم بعض المفاهيم الأساسية عن أنظمة NT , لابد أولا أن نأخذ فكرة عن مكونات النظام الأساسية , يجب التنويه أيضا عن أن كل ما سيتم شرحه ينطبق فقط على بيئة win32 .

يمكن تقسيم مكونات النظام كالتالي :-

User-mode components :

- Subsystem : وهو يتمثل في العملية Csrss.exe وهو المسؤول عن الـConsoleWindows بالاضافة الى انشاء وحذف الـThreads .

- System Processes : وهي تتمثل في العمليات التي تساعد النظام بشكل اساسي كي يعمل مثل SMSS.EXE/WINLOGON.EXE .

- Services : وهي عمليات لابد من وجودها كي تستطيع برامج اخرى ان تعمل بشكل صحيح مثل SQL Server/Spooler/MS Exchange Server .

- User Applications : وهي البرامج العادية التي نستخدمها يوميا .

Kernel-mode components :

- Kernel : ويحتوي على الروتينات الاساسية لنظام التشغيل مثل الـInterrupts Dispatcher/Thread Scheduler/Synchronization System .

- Executive : يحتوي على الـMemory Manager/Objects Manager/Security/IO System/Networking .

الـKernel و الـExecutive يتواجدان في ملف ntoskrnl.exe وهو يمثل نواة النظام .

- Hardware Abstraction Layer (HAL) : وهي طبقة لعزل باقي الكرنل عن الهاردوير بانواعه المختلفة والغرض من ذلك هو الـPortability حيث ان كل hardware مختلف سيحتاج الى HAL مختلف فقط بدون التعديل في باقي الكرنل لأن الـHAL هو الذي يوفر روتينات التعامل مع الهاردوير .

يوجد الـHAL في ملف HAL.DLL .

- GUI Kernel : وهو المسؤول عن الـUserInterface كالتعامل مع النوافذ و كائنات الـGDI كلها , ويتمثل في ملف win32k.sys .


صورة مرفقة


الفرق بين User-mode و Kernel-mode :
في مستوى المستخدم User-mode كل عملية لها ذاكرة وهمية VirtualMemory خاصة بها , كل Thread داخل العملية يتم تنفيذ الكود الخاص به داخل هذه الـVM ولا يمكنه تغيير الذاكرة الوهمية الخاصة بعملية اخرى , في مستوى الكرنل يمكن لأي Thread ان يغير من ذاكرة أي بروسس اخر وسنتكلم عن ذلك لاحقاً .

أيضا من المعلوم ان هناك Privileged Instructions لا يستطيع Thread يعمل في اليوزر مود استخدامها مثل IN/OUT/ LLDT , في مستوى الكرنل يمكنك استخدام جميع التعليمات بلا أي قيود .

أي Thread يعمل في اليوزر مود لا يمكنه استخدام موارد النظام مباشرة مثل الذاكرة الخاصة بالنظام او التعامل مباشرة مع الـHardware .

عند حدوث أي خطأ في Thread يعمل بمستوى المستخدم ولم يكن هناك ExceptionHandler فإن الذي يحدث هو إغلاق البروسس الذي يحتوي على الـThread , بينما عند حدوث خطأ اثناء عمل الـThread بمستوى النظام ولم يكن هناك ExceptionHandler مناسب فان النظام كله ينهار وربما يحدث bugcheck و ترى الشاشة الزرقاء BSoD .



هل يمكن الانتقال للكرنل من خلال Thread يعمل في يوزر مود ؟؟
نعم , وذلك عن طريق استدعاء خدمات النظام او عن طريق احداث Exception او استدعاء المقاطعات , لكن اثناء وجود الـThread في الكرنل مود لا يمكنك التحكم في سير التنفيذ حتى يعود الـThread الى الوضع السابق .


هل يمكنني استدعاء دوال الـuser-mode مثل الدوال الموجودة في Kernel32.dll/User32.dll/Ntdll.dll من خلال الكرنل مود ؟
لا يمكنك فعل ذلك مباشرة , اذا كنت تظن انه يمكنك اظهار MessageBox من driver فأنت مخطئ تماماً , لكن بالطبع هناك طرق لفعل ذلك بشكل غير مباشر , سنتكلم عن هذا في الدروس اللاحقة .


ما هي انواع الذاكرة التي سنتعامل معها ؟
نوعان PagedPool/NonpagedPool , PagedPool هي الذاكرة التي يتم عمل swapping لها اثناء انتقال الـExecution من process الى اخر فيتم تخزينها في الـPagefile الى ان ينتقل الـتنفيذ مرة اخرى الى نفس البروسس فيتم ارجاعها الى الرام , كمثال الذاكرة التي تحتوي على ملف dll في بروسس معين .
اما الـNonpagedpool فهي ذاكرة تظل موجودة في الرام ولا يتم تخزينها في الـPagefile حيث انها تمثل عناصر مهمة لا يستغني النظام عن تواجدها اثناء التنفيذ في أي بروسس كان , كمثال الـkernel نفسه و معظم الدرايفرات و الـExecutive Objects مثل الـObjects التي تمثل الـThread/Process/Key/Device .. الخ .


ما هي الادوات التي سنحتاجها للبدأ في كتابة درايفر ؟
سنحتاج الى حزمة الـDDK , أي نسخة ابتداءا من 2600 ستنفع , هذه النسخة التي استعملها حاليا وهي 3790 الخاصة بـWindows 2003 :
http://www.microsoft...dk/default.mspx
لدي ايضا النسخة الخاصة بـWindows 7 لكن لم اجربها بعد .
ستحتاج أيضا الى أي اداة تقوم باظهار الـDebug Output مثل DbgView/KernelDetective/Syser , عن نفسي أفضل استخدام DbgView .
بالطبع ستحتاج الى أي محرر للكود , يمكنك استخدام VS/Code::Block/Notepad++ او أي شئ اخر .


اترككم يومين في رعاية الله حتى تحصلوا على العدة اللازمة للبدأ وكي اقوم انا بتحضير الدرس القادم :D


السبت 7/2/2009
GamingMasteR / AT4RE


References :
Microsoft® Windows® Internals, Fourth Edition - Mark E. Russinovich, David A. Solomon

تم تعديل هذه المشاركة بواسطة Wael Dalloul: 16 June 2009 - 10:01 AM

1



#2 العضو غير متواجد حاليا   HGB 

  • المراقب العام
  • أيقونة
  • المجموعة: إدارة الفريق العربي
  • المشاركات: 9553
  • الإلتحاق: 29-October 03
  • الجنس:ذكر
  • الدولة:السودان
  • الوسام

  • الدولة :

السمعة: 64
جيد

تمت المشاركة 08 February 2009 - 08:33 PM

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

0

#3 العضو غير متواجد حاليا   GamingMasteR 

  • مشرف قسم الأسمبلي سابقاً
  • PipPipPipPip
  • المجموعة: اعضاء
  • المشاركات: 1545
  • الإلتحاق: 14-February 07
  • الجنس:ذكر
  • الوسام

  • الدولة :

السمعة: 49
جيد

تمت المشاركة 08 February 2009 - 08:40 PM

هي صورة واحدة الموجودة , ألا تظهر عندك ؟؟
0

#4 العضو متواجد   Khaled.Alshaya 

  • مشرف قسم السي سابقا++
  • PipPipPipPip
  • المجموعة: اعضاء
  • المشاركات: 1420
  • الإلتحاق: 20-September 06
  • الجنس:ذكر
  • الدولة:ياليتها كانت حمص(سوريا)
  • اهتمامات:Design and Impl. of Programming Languages
  • الوسام

  • الدولة :

السمعة: 37
جيد

تمت المشاركة 09 February 2009 - 03:52 AM

السلام عليكم ,,

جميل جداً GM كما عودتنا دائماً :)

الحقيقة هناك نقطة لم أفهمها, أعتقد أنها تافهة و لكن عقلي لم يستوعب الموضوع.

إقتباس

في مستوى المستخدم User-mode كل عملية لها ذاكرة وهمية VirtualMemory خاصة بها , كل Thread داخل العملية يتم تنفيذ الكود الخاص به داخل هذه الـVM ولا يمكنه تغيير الذاكرة الوهمية الخاصة بعملية اخرى , في مستوى الكرنل يمكن لأي Thread ان يغير من ذاكرة أي بروسس اخر وسنتكلم عن ذلك لاحقاً .

ما هو الفرق بين الذاكرة في الـ user mode و الـ kernel mode ؟
ببساطة عندما ننشئ process في الـ user mode كيف سيكون شكل الذاكرة بالنسبة لذلك الـ process و عندما ننشئ process في الـ kernel mode كيف سيرى الذاكرة ؟

و أود نصيحتك في مقال مفصل حول الذاكرة الوهمية :)
بالمناسبة المرجع لدي و سأطلع عليه.
الصور غير ظاهرة لأن الموقع محجوب في السعودية :(

في انتظار الجزء القادم :)

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya: 09 February 2009 - 04:11 AM

0

#5 العضو غير متواجد حاليا   GamingMasteR 

  • مشرف قسم الأسمبلي سابقاً
  • PipPipPipPip
  • المجموعة: اعضاء
  • المشاركات: 1545
  • الإلتحاق: 14-February 07
  • الجنس:ذكر
  • الوسام

  • الدولة :

السمعة: 49
جيد

تمت المشاركة 09 February 2009 - 05:54 AM

إقتباس

ما هو الفرق بين الذاكرة في الـ user mode و الـ kernel mode ؟

الفرق في هيكل الذاكرة نفسه ثابت ولا يتغير , الفرق موجود في امكانية الوصول الى اجزاء الذاكرة , ففي user-mode لا يمكنك التعامل سوى مع اول 2GB من الذاكرة (0x00000000->0x7fffffff) أما في kernel-mode يمكنك التعامل مع الـ4GB كلها .

إقتباس

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

نصيحة من أخوك , أنا اول مرة اطلعت فيها على هذا المرجع العظيم تعجبت لما يعطيه الناس كل هذا الاهتمام , كنت اراه مجرد كلام سايح لا رأس له من قدم , استأت جداً بسبب عدم احتوائه على اكواد ايضاً !!
لا تنخدع مثل اخوك , فالمرجع جبار من ناحية الـconcepts :wink:

أيضاً لن تجد مثل مراجع Intel او AMD , لكنها تتكلم بشكل عام اما المرجع السابق فيتحدث عما يدور داخل انظمة NT .

بالنسبة للصور فقد انتهت المدة المتاحة لي لتعديل الموضوع , يمكن لأي احد من الاخوة المشرفين تعديل الموضوع شاكراً .

تم تعديل هذه المشاركة بواسطة GamingMasteR: 09 February 2009 - 07:25 AM

0

#6 العضو متواجد   Khaled.Alshaya 

  • مشرف قسم السي سابقا++
  • PipPipPipPip
  • المجموعة: اعضاء
  • المشاركات: 1420
  • الإلتحاق: 20-September 06
  • الجنس:ذكر
  • الدولة:ياليتها كانت حمص(سوريا)
  • اهتمامات:Design and Impl. of Programming Languages
  • الوسام

  • الدولة :

السمعة: 37
جيد

تمت المشاركة 09 February 2009 - 06:13 AM

جميل جداً بدأت بالقراءة :)
متابع لموضوعك أيضاً ...

0



#7 العضو غير متواجد حاليا   do_not_forget2008 

  • عضو
  • PipPip
  • المجموعة: اعضاء
  • المشاركات: 121
  • الإلتحاق: 21-May 08
  • الدولة:Kuwait for now but Egypt Forever
  • الدولة :

السمعة: 0
عادي

تمت المشاركة 09 February 2009 - 06:47 AM

روعة كالعادة يا GM اكمل بارك الله فيك و انا معاك اخيرا هذا القسم سوف تظهر به مواضيع جديدة لتنشيط شبابه
0

#8 العضو غير متواجد حاليا   b.m.s 

  • خبير C++
  • PipPipPip
  • المجموعة: الخبراء المعتمدون
  • المشاركات: 653
  • الإلتحاق: 29-July 04
  • الجنس:ذكر
  • الدولة:الرياض
السمعة: 5
عادي

تمت المشاركة 12 February 2009 - 01:34 PM

تسجيل حضور ....

درس رائع .... راجعت فيه أشياء كثيرة نسيتها من أيام الدراسة :)

في إنتظار الدرس القادم ...
0

#9 العضو غير متواجد حاليا   do_not_forget2008 

  • عضو
  • PipPip
  • المجموعة: اعضاء
  • المشاركات: 121
  • الإلتحاق: 21-May 08
  • الدولة:Kuwait for now but Egypt Forever
  • الدولة :

السمعة: 0
عادي

أيقونة المشاركة  تمت المشاركة 14 February 2009 - 03:08 PM

اخى العزيز GM فينك و فين اخبارك وفين بقية الدروس اوعى تكون ناوى تخلى بينا لاجى اقتلك :) اخى لعل المانع خير
0

#10 العضو غير متواجد حاليا   الاخير زمانه 

  • عضو مميز
  • PipPipPip
  • المجموعة: اعضاء
  • المشاركات: 893
  • الإلتحاق: 16-April 05
  • الجنس:ذكر
  • الدولة:Iraq
  • الدولة :

السمعة: 7
عادي

تمت المشاركة 14 February 2009 - 03:14 PM

انا ايضا لا زلت انتظر ،، ان شاء الله المانع خير.

الدروس من العيار الثقيل و تحتاج الى وقت للتحضير ... ربما
0

  • (2 صفحات) +
  • 1
  • 2
  • لا تستطيع بدء موضوع جديد
  • لا تستطيع الرد على هذا الموضوع

1 أعضاء يقرؤون هذا الموضوع
0 أعضاء، 1 زوار و 0 أعضاء مختبؤون





لإفضل مشاهدة للمنتدى إستخدم مستعرض فايرفوكس