PDA

View Full Version : سوال: برنامه نویسی و ارتباط با سیستم عامل



shinyboy
چهارشنبه 23 شهریور 1390, 14:00 عصر
وقتی که یه برنامه تو محیط ویندوز اجرا میشه ، اگه از API های خود ویندوز استفاده نکرده باشه . بازم محدودیت های اعمال شده روی ویندوز، روی برنامه ما تاثیر داره!!

منظورم اینه که مثلا ما یه برنامه بنویسیم واسه کپی کردن فایل های سیستمی که تو پوشه system32 تو ویندوز هست. در ضمن تو یوزر های Limit

تاکید میکنم یوزر های لیمیت ( چون تو این یوزر ها همون طور که میدونید به خاطر مسائل امنیتی اجازه دسترسی به فایل های این پوشه واسه کپی و بقیه چیزار نیست)

حالا اگه این برنامه ما از API های ویندوز استفاده نکرده باشه بازم اجازه دسترسی به این فایل هارو نداره و نمی تونه فایل رو کپی کنه ؟!!

آیا برنامه ای که مینویسیم وقت اجرا توسط ویندوز کنترل میشه؟!! (اگه اره راهی هست که برنامه ای بنویسیم که تو محیط ویندوز اجرا بشه و مستقل از ویندوز عمل کنه )

Arcsinos
چهارشنبه 23 شهریور 1390, 18:38 عصر
سلام

همینکه داری میگی "اجرا" بشه ، یعنی اینکه ویندوز داره برنامه رو " اجرا" میکنه . یعنی داده ها رو توی رم Load میکنه و اون رو "اجرا" میکنه .

برای اینکه یه برنامه هم اجرا بشه (توی محیط ویندوز ) ،فرمتش باید Exe ، DLL ، یا COM باشه ، در غیر این صورت برنامه "اجرا" نمیشه . اگه هم فایلی این فرمت ها رو داشته باشه یعنی اینکه از بیخ متعلق به ویندوزه ، یعنی فقط توی ویندوز معنی داره ، اگه ببری توی یه سیستم عامل دیگه "اجرا" نمیشه . ( تازه اگه بخوای یه برنامه بنویسی که مستقل از ویندوز باشه یه مقدار غیر منطقی به نظر میرسه ، چون اختصاص حافظه و آزاد سازی اون رو فقط و فقط ویندوز داره انجام میده)

این سوالتم یه مقدار عجیبه حالا واسه من اینطوری میمونه که : " میشه یه پرنده پرواز کنه بدون اینکه بال بزنه " . ایگه این بشه ، برنامه ای هم پیدا میشه که توی ویندوز اجرا بشه و ربطی به ویندوز نداشته باشه و از کنترلش خارج باشه .

حالا اگه شما میخوایید یه برنامه بنویسید که مستقل از سیستم عامل باشه ، یه راه داره و اونم نوشتن یه OS جدیده . تازه اگه OS رو هم نوشتی توی ویندزو اجرا نمیشه ، مستقل اجرا میشه .

موفق باشی

shinyboy
چهارشنبه 23 شهریور 1390, 19:30 عصر
اولا تشکر می کنم که جواب سوال بنده رو دادید

ثانیا من انتظار داشتم که با راه های معقول نشه این کار رو انجام . راستی مثال جالبی زدید !! منم واسه توضیح بیشتر حرف خودم و منظورم از مثالتون استفاده می کنم البته ( حق کپی رایت واسه شما محفوظه ;) )

مثلا تو مثالی که دوستمون گفتن جواب بدیم آره میشه " یه بالن به پرنده وصل کن " میبینی که پرواز میکنه :D این گفتم هم شوخی بود هم جدی !!!

یعنی راهی پیدا بشه که ویندوز رو برنامه ای که مینویسیم کنترل نداشته باشه و اونو محدود نکنه !!

مثلا میخواییم یه فایل کپی کنیم هی نیاد زرتو زرت گیر بده که اجازه دسترسی نداری و از این حرفا . یعنی از هیچ فیلتری تو ویندوز برنامون عبور نکنه . مظورم از مستقل این بود!

Arcsinos
چهارشنبه 23 شهریور 1390, 20:03 عصر
دوست عزیز

یه راهی که به ذهنم میرسه اینه که توی User Mode کد نزنی و بری توی Kernel کد بزنی . اینجوری تو خودت میشی جزوی از ویندوز ، و ویندوز نمیتونه از کارای خودش ایراد بگیره . کاری که اکثر ویروس ها این کار رو میکنن و ویندوز فکر میکنه که چون این برنامه ، یکی از برنامه های خودشه ، بهش اجازه ی دست رسی به همه چیز رو میده .

توی ویندوز یه چهار تا Ring داریم یا به قولی چهار تا حلقه . که از 0 تا 3 شماره گذاری شدن . Ring3 همون سطحیه که ما برنامه مینویسیم ، یا به قولی User Mode و Ring0 سطح هسته است یا همون Kernel Mode که به تمام منابع سیستم دست رسی مستقیم داری و هر البته ببخشید هر غلطی که بخوای میتونی اونجا کنی . یه اشاره گر Null به یه جا بدی ، Blue Screen یا همون صفحه ی آبی میاد جلوی چشمات ولی عوضش برنامه ای که نوشتی تقریبا میشه یه قسمتی از ویندوز یا به قولی مستقل از ویندوز اجرا میشه .

یه چیز دیگه هم به ذهنم میرسه اینه که توی Kernel Mode خودت فیلتر میسازی و فیلتر ها رو مدیریت میکنی . میتونی یکی از این فیلتر هایی رو که مربوط به کارته رو Hook کنی و نذاری کاشو به درستی انجام بده و تو به راحتی کارتو انجام بدی . اگه در مورد Filter Driver هم بسرچی شاید به نتایجی برسی . ولی همه ی اینا تو کرنل مُد هستن نه تو یوز مد . یوز مد همونطور که خودت هم میگی ، زرتِ زرت میاد و بهت پیغام میده ولی توی کرنل مد ازین خبرا نیست .

بیشتر از این نمیدونم . (بسرچ)

موفق باشی

shinyboy
پنج شنبه 24 شهریور 1390, 12:22 عصر
ممنونم . میشه یکم درمورد برنامه نویسی در مد کرنل توضیح بدید . من سرچ کردم ولی چیزی پیدا نکردم.

یکم به صورت کلی . که مثلا چطور یه برنامه تو مد کرنل بنویسیم. ویا اصلا این گونه برنامه نویسی چطوریه . یه منبع هم معرفی کنید. سپاس .

vasilopita
پنج شنبه 24 شهریور 1390, 15:46 عصر
بله منم می خوام در مورد کرنل بیشتر بدونم.

Arcsinos
پنج شنبه 24 شهریور 1390, 16:14 عصر
تو این مد اکثر فایل هایی که کامپایل میشن با Sys. هستن . یعنی به جای فایل Exe. که ویندوز اجراش میکنه ، این فایلها اکستنشنشون Sys. هست به همین خاطر هم وقتی که این فایل رو نصب میکنید در اکثر مواقع باید سیستم عامل رو ریست کنید تا وقتی که هسته ی ویندوز داره لود میشه این فایل ها رو هم لود کنه و همونطور که تو بالا گفتم جزوی از خود ویندوز بشه و یه برنامه ی جداگانه نباشه ( مثل اکثر ویروس ها و آنتی ویروس ها ، که بدون اینکه از کاربر اجازه بگیرن هر فایلی رو که عشقشون میکشه پاک میکنن ، هر چی هم بخوان اضافه میکنن ، تازه خیلی از آنتی ویروس هارو اگه بخوایید تو windows task manager ، کیل (Kill) کنید میبینید که نمیتونید این کار رو انجام بدید ، این به خاطر اینه که این نرم افزار ها برخی از توابع یا به قولی IRP ها رو Hook میکنن و نمیذارن که این وقفه ها کارشون رو به درستی انجام بدن ). برای شروع کد نویسی توی Kernel Mode باید (یا بهتره) از نوشتن Device Driver شرو کنید . در این باره هم مطلب ریخته بسیار زیاد .

منبع انگلیسی برای شروع کار (http://catch22.net/tuts/kernel101)

ترجمه ی نه چندان خوب خودم برای شروع کار از منبع بالا (http://arcsinos.blogfa.com/post-181.aspx)

تو گوگل یا MSDN سرچ کنید انقدر مطلب میاره که مختون سوت بکشه .

موفق باشید .

bigtime
پنج شنبه 24 شهریور 1390, 16:18 عصر
با سلام
اقا من از بحث و موضوع که لذت بردم اقا اگر بخواید من می تونم این کار برنامه نویسی برای کرنل رو آموزشش رو در اینجا قرار بدم حالا اگر مایلید اول از همه باید بگم که برای kernel ویندوز نمی شه این کار رو کرد ولی برای linux و سیستم عامل های open source می شه کرد و باید زبان c رو خورده باشید
اگر مایل بودید بهم خبر بدید.

vasilopita
جمعه 25 شهریور 1390, 00:04 صبح
تو این مد اکثر فایل هایی که کامپایل میشن با Sys. هستن . یعنی به جای فایل Exe. که ویندوز اجراش میکنه ، این فایلها اکستنشنشون Sys. هست به همین خاطر هم وقتی که این فایل رو نصب میکنید در اکثر مواقع باید سیستم عامل رو ریست کنید تا وقتی که هسته ی ویندوز داره لود میشه این فایل ها رو هم لود کنه و همونطور که تو بالا گفتم جزوی از خود ویندوز بشه و یه برنامه ی جداگانه نباشه ( مثل اکثر ویروس ها و آنتی ویروس ها ، که بدون اینکه از کاربر اجازه بگیرن هر فایلی رو که عشقشون میکشه پاک میکنن ، هر چی هم بخوان اضافه میکنن ، تازه خیلی از آنتی ویروس هارو اگه بخوایید تو windows task manager ، کیل (Kill) کنید میبینید که نمیتونید این کار رو انجام بدید ، این به خاطر اینه که این نرم افزار ها برخی از توابع یا به قولی IRP ها رو Hook میکنن و نمیذارن که این وقفه ها کارشون رو به درستی انجام بدن ). برای شروع کد نویسی توی Kernel Mode باید (یا بهتره) از نوشتن Device Driver شرو کنید . در این باره هم مطلب ریخته بسیار زیاد .

منبع انگلیسی برای شروع کار (http://catch22.net/tuts/kernel101)

ترجمه ی نه چندان خوب خودم برای شروع کار از منبع بالا (http://arcsinos.blogfa.com/post-181.aspx)

تو گوگل یا MSDN سرچ کنید انقدر مطلب میاره که مختون سوت بکشه .

موفق باشید .

آقا دستت درد نکنه. خیلی استفاده کردم. البته از اهنگ هات خیلی بیشتر تر استفاده کردم. (خیلی قشنگ بودن):لبخندساده:

vasilopita
جمعه 25 شهریور 1390, 00:05 صبح
با سلام
اقا من از بحث و موضوع که لذت بردم اقا اگر بخواید من می تونم این کار برنامه نویسی برای کرنل رو آموزشش رو در اینجا قرار بدم حالا اگر مایلید اول از همه باید بگم که برای kernel ویندوز نمی شه این کار رو کرد ولی برای linux و سیستم عامل های open source می شه کرد و باید زبان c رو خورده باشید
اگر مایل بودید بهم خبر بدید.
اگه این کار و کنید که واقعا لطف کردید. البته اگه می خواید آموزش بدید خواهشا از پایین ترین سطح ممکن شروع به آموزش کنید
ممنون

r00tkit
جمعه 25 شهریور 1390, 01:07 صبح
برای kernel ویندوز نمی شه این کار رو کرد ولی برای linux و سیستم عامل های open source می شه کرد
چه کاری رو نمی شه با کرنل ویندور کرد ؟ ولی با لینوکس می شه ؟


اقا من از بحث و موضوع که لذت بردم اقا اگر بخواید من می تونم این کار برنامه نویسی برای کرنل رو آموزشش رو در اینجا قرار بدم
نیکی و پرسش ؟


برای اینکه یه برنامه هم اجرا بشه (توی محیط ویندوز ) ،فرمتش باید Exe ، DLL ، یا COM باشه
فقط اینا نیست


توی ویندوز یه چهار تا Ring داریم یا به قولی چهار تا حلقه . که از 0 تا 3 شماره گذاری شدن
این حلقه ها ربطی به ویندوز نداره دقت کن چی می نویسی !


یه قسمتی از ویندوز یا به قولی مستقل از ویندوز اجرا میشه .

تو به چی می گی ویندوز؟ قسمتی از ویندوز یا مستقل از ویندوز ؟ ار خودت چیزی ننویس!! به نظرت کرنل مربوط به ویندوز نیست ؟



یه چیز دیگه هم به ذهنم میرسه اینه که توی Kernel Mode خودت فیلتر میسازی و فیلتر ها رو مدیریت میکنی
تو مدیریت می کنی فیلتر ها رو ؟؟ از کی ؟؟


این به خاطر اینه که این نرم افزار ها برخی از توابع یا به قولی IRP ها رو Hook میکنن و نمیذارن که این وقفه ها کارشون رو به درستی انجام بدن ).
خودت فهمیدی چی نوشتی ؟ IRP چه ربطی داره به تابع ها و هر دوی اینجا چه ربط داره به وقفه ها ؟؟؟


حالا اگه شما میخوایید یه برنامه بنویسید که مستقل از سیستم عامل باشه ، یه راه داره و اونم نوشتن یه OS جدیده . تازه اگه OS رو هم نوشتی توی ویندزو اجرا نمیشه ، مستقل اجرا میشه .
حتی یه کلمش درست نبود !!!

متن تو رو این جوری من می نویسم خودت ببن چی نوشتی !

""""حالا اگه شما میخوایید یه برنامه بنویسید که مستقل از OS باشه ، یه راه داره و اونم نوشتن یه OS جدیده """"

os=سیستم عامل

ادامهی متن هم که .....

من فقط اشکال ها رو گرفتم چون سوالی نبود که جواب بدم

سوالی فنی بود در خدمتم
موفق باشید

Arcsinos
جمعه 25 شهریور 1390, 01:36 صبح
با سلام

فقط اینا نیست -> منم نگفتم فقط ایناست .

این حلقه ها ربطی به ویندوز نداره دقت کن چی می نویسی ؟ -> منم نگفتم مختص به ویندوزه .

تو مدیریت می کنی فیلتر ها رو ؟؟ از کی ؟؟ -> منظور این بود که فیلتر میسازی .

خودت فهمیدی چی نوشتی ؟ IRP چه ربطی داره به تابع ها و هر دوی اینجا چه ربط داره به وقفه ها ؟؟؟ -> این جمله رو از قصد این جوری نوشتم . مثل خودت که یه چیز کاملا اشتباه رو میگفتی درسته ، ولی میدونستی اشتباهه .(البته شاید باور نکنی ولی دقیقا موقع نوشتن حواسم بود چی دارم مینویسم )

حتی یه کلمش درست نبود !!! -> منظورم دقیقا جمله ای بود که شما نوشتی ولی به زبان دَری .(من ادبیات شدم 11)

با تشکر از اینکه وقتتون رو گذاشتید و اشکالات بنده ی حقیر رو بر طرف کردید ، به قول بچه ها هیچ اگر سایه بگیرد ، من همان سایه ی هیچم . همینکه شما بزرگان وقت با ارزشتون رو واسه رفع اشکالات ما میذارید کلی ارزش داره . خودت هم میدونی من هنوز اول راه هم نیستم ، قبل از اول راهم . پس اگه اشکالی هم هست ، دوستان باید ببخشن . سعی میکنیم دیگر تکرار نکنیم .

شما هم موفق باشید

vasilopita
جمعه 25 شهریور 1390, 11:54 صبح
حالا خواهشا بجای این اشکال گیری ها و این تعارف ها یکی بیاد از پایه یه آموزش درست و حسابی بزاره

r00tkit
جمعه 25 شهریور 1390, 14:23 عصر
نه تنها من بلکه هر کسی که تو این زمنیه کار میکنه وقت نداره بیاد توی فروم اموزش درایرو نویسی رو بده !!!!

فقط می تونی امید وار بشی سوال هات رو جواب بدم

این جا اکثر چیز هایی که لازم داری رو معرفی کرده :
http://quequero.org/Device_Driver_Development_For_Beginners

Arcsinos در هر صورت سعی کن درست راهنمایی کنی

شاید یه زمانی حوصلم شد و یه چند کلمه ای در مورد درایور نویسی نوشتم :) موفق باشید

pe32_64
جمعه 25 شهریور 1390, 18:42 عصر
اگه مایلید می توانید برای شروع به سایت code project.com سر بزنید که آموزش هایی رو که می خواین رو داره


البته ببخشید که آدرس دقیقشو نمی گم چون ماقعا یادم نیست ولی با یک جستجو داخل سایت پیدا کنید

r00tkit
جمعه 25 شهریور 1390, 19:07 عصر
اگه مایلید می توانید برای شروع به سایت code project.com سر بزنید که آموزش هایی رو که می خواین رو داره

البته ببخشید که آدرس دقیقشو نمی گم چون ماقعا یادم نیست ولی با یک جستجو داخل سایت پیدا کنید

توی لینکی که من دادم هستش ( کاش یه نگاه می انداختی )