View Full Version : فهمیدن رینگ فعلی
Delphi Skyline
جمعه 30 شهریور 1386, 13:40 عصر
سلام . ببخشید که اینقدر سوال می کنم . میخواستم بدونم که سی پی یو از کجا می دونه که پروسه فعلی چه مجوز هایی (رینگ 0 ... 3) داره ؟؟
Inprise
جمعه 30 شهریور 1386, 14:43 عصر
CPU چیزی رو نمیدونه در کل . چون یه ماشین هست .
سیستم عامل بر اساس معماری اش تشخیص میده که هر پروسه چه مجوزی داره و چه دسترسی هائی و بر اساس اون ، وضعیت پردازنده تغییر داده میشه . مثلا روی ویندوز در هدر فایلهای PE نوع Subsystem ای که باید اجرا بشه مشخص شده . Loader ویندوز اصلا فایلهائی که کد کرنل دارن رو اجرا نمیکنه و تکلیفش روشنه . روتینهائی که برای فراخوانی درایورها در نظر گرفته شدن هم طبیعتا در فضای یک پروسه درایور رو فراخوانی میکنند و در بدنه درایور کدهای با مجوز سطح0 میتونن اجرا بشن که بدیهی است قبل از اجرای کدهای کرنل CPU به رینگ صفر برده میشه ( استثناء هائی هم هست که چون کلیت بحث رو بیخود خراب میکنند لازم نبود ذکر بشن )
Delphi Skyline
جمعه 30 شهریور 1386, 17:03 عصر
خوب با تشکر . قسمت اول فهمیده شد . حالا میریم سراغ اینکه برای تغییر حالت پردازنده چه چیزی رو باید تغییر داد ؟ ( کد نمی خوام . توضیح لطفا .) . و در نهایت اینکه پس میشه حتی مجوز های یک برنامه رینگ 3 رو به رینگ 0 تغییر داد ( خوب در این صورت که با نوشتن چند خط کد ساده این نظم رینگ ها به هم می خوره ؟؟) ؟؟؟؟
Inprise
شنبه 31 شهریور 1386, 13:03 عصر
برای تغییر حالت پردازنده چه چیزی رو باید تغییر داد ؟
چیزی تغییر نمیکنه . باید به پردازنده دستور بدی در حالت Ring0 عمل کنه یا از این حالت بیرون بیاد . بسته به معماری ؛ مثلا روی اینتل از زوج دستورات SYSENTER/SYSEXIT استفاده میشه .
در نهایت اینکه پس میشه حتی مجوز های یک برنامه رینگ 3 رو به رینگ 0 تغییر داد
مجوز چیه ؟
با نوشتن چند خط کد ساده این نظم رینگ ها به هم می خوره ؟
دستور ماشین رو گذاشتن که صدا کنی و ازش استفاده کنی . بقیه اش بر عهده سیستم عامل است .
cybercoder
شنبه 31 شهریور 1386, 13:17 عصر
دستور ماشین رو گذاشتن که صدا کنی و ازش استفاده کنی . بقیه اش بر عهده سیستم عامل است
یعنی اجازه اجرا نمی ده دیگه نه؟
یک Mode خاصی ماکرواسمبلر داشت ؟ تو اون mode هم نمیشه ؟
Delphi Skyline
شنبه 31 شهریور 1386, 13:52 عصر
مجوز چیه ؟منظورم اینه که میشه قبل از اجرای یک برنامه رینگ 3 پردازنده با درایور ما به رینگ 0 تنظیم بشه . پس در این صورت این برنامه به راحتی می تونه هر کاری بکنه ؟؟
در ضمن SYSENTER و SYSEXIT روی کدام نوع پردازنده ها جواب می ده ؟؟ (مال اینتل)
Inprise
شنبه 31 شهریور 1386, 14:36 عصر
در ضمن SYSENTER و SYSEXIT روی کدام نوع پردازنده ها جواب می ده ؟؟ (مال اینتل)
راهنمای اینتل رو ببین .
میشه قبل از اجرای یک برنامه رینگ 3 پردازنده با درایور ما به رینگ 0 تنظیم بشه
تئوری ؟ آره . ولی مدل دسترسی به حافظه و فراخوانی توابع و ...کاملا متفاوت هست بنابراین کد Ring 3 رو نباید وقتی پردازنده روی Ring 0 است اجرا کنی . البته اگر کدت جمع کردن محتوای دو تا رجیستر باشه اجرا میشه ، اما همینکه به حافظه دست بزنی یا بخواهی چیزی رو فراخوانی کنی متوقف میشی .
در این صورت این برنامه به راحتی می تونه هر کاری بکنه ؟؟
هر کاری یعنی دقیقا چه کاری ؟
من حس میکنم تصور میکنی که Ring 0 یک مکان رویائی است که اگر کدی آنجا اجرا بشه اجرا کننده رو به سمت الدورادو میبره ؟ Ring 0 کدها رو با دسترسی متفاوت برای اهداف متفاوت اجرا میکنه ، همین . مثلا اگر بخواهی مستقیما روی پورت مانیتور نقاشی کنی Ring 0 محل خوبی است اما باید باز هم از توابع فراهم شده توسط سیستم عامل استفاده کنی ، یعنی کدی که برای Ring 3 نوشته شده چون به توابع کرنل دسترسی نداره بی معنی است که منتظر باشه اگر دسترسی به Ring 0 فراهم شد کار خارق العاده ای انجام بده . اصولا در هر دو محیط مدل مدیریت حافظه متفاوت ، و توابع متفاوتی برای کار کردن وجود دارن . کسی که مدیر سیستم است یا مجوز فراخوانی درایور داره طبیعتا بسادگی کد کرنل اجرا میکنه . اگر کدی برای کرنل نوشته نشده باشه انتقال پردازنده به Ring 0 خدمت خاصی به اون کد نمیکنه .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.