PDA

نسخه کامل مشاهده نسخه کامل : نوشتن بوت لودر با اسمبلی و C



sada
12-02-2014, 10:34
با سلام
من می خواستم به برنامه بنویسم که موقع بوت کامپیوتر بیاد بالا و بتونم لیست فایل ها و فلدر های (مثل دستور dir) مثلا درایو c رو بهم نشون بده.
خوده بوت لودر رو تونستم بنویسم که بتونه مثلا روی صفحه یه چیزی نمایش بده(یه جمله رو) ولی اون لیست فایل ها رو نمیدونم چطوری انجام بدم.
ممنون میشم اگه کسی بلده راهنمایی کنه

Msba
12-02-2014, 11:29
من عمل شما را بلد نیستم اما تا آنجایی که من می دانم در هنگام بوت می بایست درایور های مختلف ( در واقع آدرس های مختلف) هندل شود. حال نمی دانم که بوت شما بوت کاملا مستقلی است یا روی یک بوت دیگر در حال انجام است. اما دیده ام که برخی شرکت ها برای عمل بوت خود از بوت نصب ویندوز استفاده کرده و آنجایی که می خواهد نصب شروع شود Application خود را قرار می دهند اینگونه دیگر درگیر رفتارهای بوت و درایور ها نمی شوند.
اگر توضیح بیشتری در مورد نحوه ی نگارش و مسائل مربوط دیگر بدهید شاید دوستان بتوانند راهنمایی های بهتری انجام دهند.

موفق باشید.

sada
12-02-2014, 12:14
در واقع سوال اینطور بوده که یک بوت لودر یا حالا برنامه ای بنویسیم که بتونه ابتدای ویندوز بوت شده(حالا به کمک بایوس یا هر چیزی) و بتونه لیست فایل ها و فلدر های مثلا درایو c رو نمایش بده روی صفحه.
فرقی هم نمی کنه که چطور نوشته بشه حالا یا با c یا اسمبلی

Ali_RNT
13-02-2014, 10:34
712:من خیلی چیزی نمیدونم.ولی میدونم که بوت لودر رو باید به اسمبلی بنویسید(حتما)...

sada
13-02-2014, 12:23
712:من خیلی چیزی نمیدونم.ولی میدونم که بوت لودر رو باید به اسمبلی بنویسید(حتما)...

ممنون.آره حالا خودم به یه جاهایی رسیدم ولی فقط روی صفحه می تونم یه متنو نمایش بدم نمی تونم لیست فایل ها رو بگیرم
این هست اون چیزی که پیدا کردم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

V i r u s e r
13-02-2014, 12:55
سلام دوست عزیز
همچین کاری با نوشتن یک بوت لودر ساده امکان پذیر نیست. اصلا این چیزی که می خواهید بنویسید بوت لودر نیست. بوت لودر برنامه ای هست که محیط رو برای اجرای سیستم عامل اصلی اماده می کنه و اون رو اجرا می کنه.
شما باید یک برنامه ای بنویسید که درایور های AHCI یا IDE رو براش پورت کنید تا بتونه هارد رو شناسایی کنه.
بعد از این که هارد فیزیکی رو شناسایی کردید باید پارتیشن های های هر هارد رو شناسایی کنید. در مرحله ی بعد باید با توجه به فایل سیستم پارتیشن مورد نظر، جدول لیست فایل ها رو ترجمه کنید برای سیستم عامل. در نهایت از جدول مورد نظر استفاده کنید تا لیست فایل های موجود رو نمایش بدید.
برای این کار باید کاملا با نوع فایل سیستم مورد نظر اشنایی داشته باشید و بدونید در هر سکتور پارتیشن چه چیزی رو انتظار داشته باشید. برای این کار در حال حاضر فایل سیستم Fat32 برای یاد گیری از همه اسون تره و اون رو پیشنهاد می کنم.
اینم سایت برای مطالعه ی بیشتر: osdev.org

ادیت: اشتیاه شد، در محیط Real Mode نیازی به درایور برای هارد نیست. بنده فکر می کردم در محیط Protected Mode بحث می کنیم.
برای Real Mode چون دسترسی به بایاس ازاد هست، خود بایاس درایور های چیز های ساده رو داره
برای این کار می تونید از توابع موجود ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])استفاده کنید. کافیه با استفاده از اینتراپت 0x13 هارد رو شناسایی کنید و با خوندن سکتور 0 و .. جدول فایل سیستم رو باز کنید

Ali_RNT
13-02-2014, 16:37
712:خیلی ممنون دوستان.واقعا مفید بود.چون من چند ماهه که دارم روی یک کرنل ساده کار میکنم!!!گر چه هنوز کاری به بوت لودر نداشتم...

V i r u s e r
13-02-2014, 20:47
712:خیلی ممنون دوستان.واقعا مفید بود.چون من چند ماهه که دارم روی یک کرنل ساده کار میکنم!!!گر چه هنوز کاری به بوت لودر نداشتم...

سلام
در حال حاضر که حجم کرنلتون کمه می تونید مستقیما اون رو روی سکتور بوت نصب کنید. ولی وقتی حجم کرنل بره بالا دیگه جا نمیشه. به خاطر همین باید از بوت لودر استفاده کنید.
بوت لودر یه جورایی یه کرنل ساده و کم حجمه که اول اجرا میشه و بعد هسته ی اصلی رو اجرا می کنه.
برای این کار هم احتیاجی به بوت لودر نوشتن ندارید. می تونید از نمونه های موجود مثل Grub استفاده کنید. نوشتن بوت لودر در حال حاضر مثل اختراع چرخ هست و بهتره وقتتون رو روی سیستم عامل اصلی بزارید. :n16:

sada
13-02-2014, 22:47
ادیت: اشتیاه شد، در محیط Real Mode نیازی به درایور برای هارد نیست. بنده فکر می کردم در محیط Protected Mode بحث می کنیم.
برای Real Mode چون دسترسی به بایاس ازاد هست، خود بایاس درایور های چیز های ساده رو داره
برای این کار می تونید از توابع موجود ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])استفاده کنید. کافیه با استفاده از اینتراپت 0x13 هارد رو شناسایی کنید و با خوندن سکتور 0 و .. جدول فایل سیستم رو باز کنید


سلام دوست عزیز خیلی ممنون.
میشه یکم بیشتر راهنمایی کنید مرحله به مرحله چون من آشنایی زیادی به اسمبلی ندارم.