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

اذهب للمحتوى

صفحة 1 من 1
  • لا يمكنك بدء موضوع جديد
  • لا يمكنك الرد على هذا الموضوع

[مقالة]  Kernel-mode Programming #1

#1 تم منح النقاط لهذا الرد     غير متواجد   GamingMasteR Icon تم الإعتماد بواسطة HGB

  • مشرف قسم Windows API
  • مجموعة المشرفون
  • مشاركات 1691
  • التقييم 132
  • النقاط المتوفرة 40.39
  • 34.39
    النقاط المحصلة
++

ارسل ايقونة  تم الارسال 08/02/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 .


ارفق صورة : monthly_06_2009/post-51753-1245135663.jpg


الفرق بين 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/06/2009 - 10:01 AM

2

شارك هذا الموضوع

      

#2     غير متواجد   HGB Icon

  • المراقب العام
  • مجموعة إدارة الفريق العربي
  • مشاركات 10525
  • التقييم 204
  • النقاط المتوفرة 57.92
  • 54.28
    النقاط المحصلة
++

تم الارسال 08/02/2009 - 08:33 PM

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

0

#3     غير متواجد   GamingMasteR Icon

  • مشرف قسم Windows API
  • مجموعة المشرفون
  • مشاركات 1691
  • التقييم 132
  • النقاط المتوفرة 40.39
  • 34.39
    النقاط المحصلة
++

تم الارسال 08/02/2009 - 08:40 PM

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

#4     غير متواجد   Khaled.Alshaya Icon

  • مشرف قسم السي ++
  • مجموعة المشرفون
  • مشاركات 1650
  • التقييم 320
  • النقاط المتوفرة 38.00
  • 58.00
    النقاط المحصلة
++

تم الارسال 09/02/2009 - 03:52 AM

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

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

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

Quote

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

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

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

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

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

0

#5     غير متواجد   GamingMasteR Icon

  • مشرف قسم Windows API
  • مجموعة المشرفون
  • مشاركات 1691
  • التقييم 132
  • النقاط المتوفرة 40.39
  • 34.39
    النقاط المحصلة
++

تم الارسال 09/02/2009 - 05:54 AM

Quote

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

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

Quote

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

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

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

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

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

0

#6     غير متواجد   Khaled.Alshaya Icon

  • مشرف قسم السي ++
  • مجموعة المشرفون
  • مشاركات 1650
  • التقييم 320
  • النقاط المتوفرة 38.00
  • 58.00
    النقاط المحصلة
++

تم الارسال 09/02/2009 - 06:13 AM

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

0

#7     غير متواجد   do_not_forget2008 Icon

  • عضو
  • مجموعة اعضاء
  • مشاركات 121
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 09/02/2009 - 06:47 AM

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

#8     غير متواجد   b.m.s Icon

  • خبير C++
  • مجموعة الخبراء المعتمدون
  • مشاركات 660
  • التقييم 12
  • النقاط المتوفرة 10.20
  • 2.40
    النقاط المحصلة
++

تم الارسال 12/02/2009 - 01:34 PM

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

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

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

#9     غير متواجد   do_not_forget2008 Icon

  • عضو
  • مجموعة اعضاء
  • مشاركات 121
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

ارسل ايقونة  تم الارسال 14/02/2009 - 03:08 PM

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

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

  • عضو مميز
  • مجموعة اعضاء
  • مشاركات 988
  • التقييم 23
  • النقاط المتوفرة 14.40
  • 7.80
    النقاط المحصلة
++

تم الارسال 14/02/2009 - 03:14 PM

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

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

#11     غير متواجد   GamingMasteR Icon

  • مشرف قسم Windows API
  • مجموعة المشرفون
  • مشاركات 1691
  • التقييم 132
  • النقاط المتوفرة 40.39
  • 34.39
    النقاط المحصلة
++

تم الارسال 14/02/2009 - 06:25 PM

السلام عليكم .

اطمئنوا لن اتوقف عن الكتابة والنقاط الاساسية تم تحديدها مسبقاً , لكن الجهاز لدي جنّ جنونه , هناك عيب في احد قطع الهاردوير ولم اتعرف عليها بعد .
0

#12     غير متواجد   الاخير زمانه Icon

  • عضو مميز
  • مجموعة اعضاء
  • مشاركات 988
  • التقييم 23
  • النقاط المتوفرة 14.40
  • 7.80
    النقاط المحصلة
++

تم الارسال 14/02/2009 - 06:32 PM

View PostGamingMasteR, on Feb 14 2009, 06:25 PM, said:

السلام عليكم .

اطمئنوا لن اتوقف عن الكتابة والنقاط الاساسية تم تحديدها مسبقاً , لكن الجهاز لدي جنّ جنونه , هناك عيب في احد قطع الهاردوير ولم اتعرف عليها بعد .


و عليكم السلام ،،
الحمد لله ،، اذا على الجهاز فبسيطة:lol:
وان شاء الله تقدر تحل المشكلة بأسرع وقت لكي تكمل
0

#13     غير متواجد   ramijz Icon

  • عضو جديد
  • مجموعة اعضاء جدد
  • مشاركات 18
  • التقييم 0
  • النقاط المتوفرة 6.00
  • 0.00
    النقاط المحصلة
++

تم الارسال 30/12/2009 - 10:59 PM

السلام عليكم

اشكر الاخ العزيز gm على هذا الشرح الجميل
وللمزيد من الشرح عن برمجة برامج قيادة الاجهزة احبائي في الله عليكم بزيارة هذه السلسلة التعريفية البسيطة واليكم الروابط :
المقدمة 1
http://www.codeproje.../driverdev.aspx
الجزء 2
http://www.codeproje...driverdev2.aspx
الجزء 3
http://www.codeproje...driverdev3.aspx
الجزء 4
http://www.codeproje...verdev4asp.aspx
الجزء 5
http://www.codeproje...verdev5asp.aspx
الجزء 6
http://www.codeproje...verdev6asp.aspx

والسلام عليكم
0

شارك هذا الموضوع


صفحة 1 من 1
  • لا يمكنك بدء موضوع جديد
  • لا يمكنك الرد على هذا الموضوع

( 1 ) عضو يشاهد هذا الموضوع
( 0 ) الأعضاء, ( 1 ) الزوار, ( 0 ) عضو بدخول مخفي




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

 الآن ... إستايل خاص لمن يملك هاتف iPhone  ... لتنزيل البرنامج  اضغط هنا