PDA

View Full Version : آموزش: بوت لودر و جدول پارتیشن



ali.asady
سه شنبه 31 خرداد 1390, 01:52 صبح
آموزش نوشتن اولین بوت لودر

یک بوت لودر باید خصوصیات زیر را داشته باشد
1)اندازه آن در نهایت 512 بایت باشد
2)پایان آن به علامت 55 AA می رسد
3)از آدرس حافظه 7C00 شروع می شود
4)برنامه ای بسیار کوچک است و سریع لود می شود
تا قسمت دوم یعنی برنامه هسته جهت یافتن سیستم عامل را لود کند

برنامه های مورد نیاز
1-اسمبلر
2-برنامه کپی جهت نصب بوت لودر
من از اسمبلر اوپن سورس nasm استفاده و جهت نصب از برنامه partcopy استفاده می کنم


[BITS 16]

این خط جهت راهنمایی اسمبلر برای ساختن برنامه های 16 بیتی است

[ORG 0x7C00]


همان طور که قبلاْ اشاره شد از آدرس حافظه 7C00 شروع می شود

; Main program
main:
شروع برنامه

mov ax,0x0000
mov ds,ax


مقدار دهی سگمنت داده ها و مشخص کردن محل داده ها.

call WriteStr

جهت نوشتن پیغام در خروجی


WriteStr:
برچسب شروع روال

mov ah,0x0E

تابع جهت نمایش کارکتر

mov bh,0x00

شماره صفحه

mov bl,0x07


.nextchar


lodsb

جهت خواندن بلوک رشته

or al,al

jz .return

int 0x10

فراخوانی وقفه 10 بایوس

jmp .nextchar

پرش جهت خواندن کارکتر بعدی

.return

برچسب جهت کنترل پایان روال

ret

پایان روال

HelloWorld db 'Hello World',13,10,0

متغییر جهت متن پیغام

times 510-($-$$) db 0

پر کردن سکتور ها با مقدار 0

dw 0xAA55

علامت 55 AA جهت پایان فایل بوت لودر


کامپایل با دستور

nasm yourbootsector.asm -f bin -o bootsec.bin


اما کپی کردن به بوت سکتور فلاپی


partcopy bootsec.bin 0 200 -f0

پایان جلسه 1
ادامه دارد

ali.asady
دوشنبه 13 تیر 1390, 22:30 عصر
در این جلسه درباره خدول تخصیص پارتیشن ها (Partition Table) و محل قرار گیری بوت لودر توضیحاتی خدمتتان عرض می کنم
71880

همانطور که در این عکس می بینید MBR یا Master boot record شامل سه قسمت است


جدول تخصیص پارتیشن(رنگ سبز) اندازه آن 64 بایت
محل قرار گیری بوت لودر(رنگ زرد) اندازه آن 446 بایت
بیت های نشانه(آبی رنگ)

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

به عنوان مثال 16 بایت به شرح زیر می باشد

بایت 0 اکتیو بودن (بوتیبل) مقدار 0 بوتیبل نیست , مقدار 0x80 بوتیبل است
بایت 1 سیلندر شروع
بایت 2 هد شروع
بایت 3 سکتور شروع
بایت 4 نوع پارتیشن
بایت 5 سیلندر پایان
بایت 6 هد پایان
بایت 7 سکتور پایان
بایت 8 الی 11 سکتور شروع در حالت LBA
بایت 12الی 15 سکتور پایان در حالت LBA

این هم یک عکس از میکروسافت درباره این موضوع

71888

خوب جلسه بعد درباره Embr و پارتیشن های پیشرفته و جدول پارتیشن توضیح بیشتری می دهم
موفق باشید
ادامه دارد

xman_1365_x
دوشنبه 20 تیر 1390, 01:00 صبح
با تشکر از دوست گرامی
چیزی که دوستان ندیدم اینجا یا جای دیگه ازش حرفی بزنند ،اونم اینه که نوشتن دستورات وقتی محدودیت حافظه داریم مثلا نوشتن بوت لودر یا برنامه برای رام اینه که باید به اندازه دستورات توجه داشت و تا جایی که میشه از دستورات مشابه که بایت کمتری اشغال میکنه استفاده کنیم موارد دیگه میتونه وقفه های مورد استفاده باشه(در برنامه های بزرگ سرعت اجرا و کارامد بودن که در همین حد توضیح در این بحث کافیه) که روی هر سیستم سازگاری داشته باشه البته فکر میکنم بهتر میبود بحث لودر رو تمام میکردین بعد ادامه میدادین
موفق باشی

ali.asady
دوشنبه 20 تیر 1390, 18:04 عصر
با تشکر از دوست گرامی
چیزی که دوستان ندیدم اینجا یا جای دیگه ازش حرفی بزنند ،اونم اینه که نوشتن دستورات وقتی محدودیت حافظه داریم مثلا نوشتن بوت لودر یا برنامه برای رام اینه که باید به اندازه دستورات توجه داشت و تا جایی که میشه از دستورات مشابه که بایت کمتری اشغال میکنه استفاده کنیم موارد دیگه میتونه وقفه های مورد استفاده باشه(در برنامه های بزرگ سرعت اجرا و کارامد بودن که در همین حد توضیح در این بحث کافیه) که روی هر سیستم سازگاری داشته باشه البته فکر میکنم بهتر میبود بحث لودر رو تمام میکردین بعد ادامه میدادین
موفق باشی

دوست عزیز اولی مقدمه بوت لودر بود و دومی رو گفتم که دوستان بدونند که وضعیت بوت لودر چطوری وکجا قرار میگیریه درضمن این دوتا لازم و ملزوم هم وموضوعات آن هم تقریبا بهم پیچیده هستند

xman_1365_x
دوشنبه 20 تیر 1390, 20:38 عصر
دوست عزیز اولی مقدمه بوت لودر بود و دومی رو گفتم که دوستان بدونند که وضعیت بوت لودر چطوری وکجا قرار میگیریه درضمن این دوتا لازم و ملزوم هم وموضوعات آن هم تقریبا بهم پیچیده هستند
دوست عزبز اینکه لازم و ملزومه درست اما فکر میکنم اگر جای دو پست اول و دوم به همراه یک مقدمه میومد خیلی خوب میشید و در ادامه و شروع به نوشتن بوت لودر کنید که نمیدونم تا چه سطحی پیش میرین
(به زبان ساده تر برای دوستان مبتدی مثل من که نمیدونم بوت لودر چیه باعث سردرگمی نشه این نظر شخصیمه)


من منظورت رو از سوال نوشتن دستورات وقتی محدودیت حافظه داریم رو درست نفهمیدم
یعنی اینطوری برداشت کردم که اگه 446 بایت داریم چطور بوت لودر رو بنویسیم و درون آن وارد کنیم:لبخندساده::تشویق:
اول اینو بگم پستی که من دادم برای این بود که به نکته ای که مهم و هست و نادیده گرفته میشه اشاره کنم نه اینکه بحث عوض شه پس اگر سوالی بود پیام شخصی بدین تا پیوستگی مطالب بهم نخوره
حالا اینو چون پرسیدین و مرتبط هست با مثالی میگم
با فرض اینکه :


mov eax,0FFFFh
mov ebx,1234h

میخواهیم جای این دو عدد در ثبات را جابجا کنیم سه راه رو میگم
1-


mov ecx,eax
mov eax,ebx
mov ebx,ecx

2-


push eax
push ebx
pop eax
pop ebx

3-


xchg eax,ebx

خوب هر سه قسمت یک کارو انجام میدن اما تفاوت در سرعت اجرا و اندازه کد ماشین هست که در اینجا بایت یا همون اندازه دستور برای ما هائز اهمیت هست کد اول 6 بایت و کد دوم 4 بایت که بدی این دستور اینه سرکشی به حافظه که در برنامه های بزرگ باعث تاخیر میشه و بهتره هر چی بیشتر با ثبات ها کار کنیم و دستور سوم 1 بایت اشغال میکنه حالا کاملا مشخص شد برای نوشتن برنامه به اسم بوت لودر اگر ما برنامه رو بدون در نظر گرفتن این بایت ها انجام بدیم فکر نمیکنم کار موثر زیادی رو بشه انجام داد
80x86 instruction set (http://www.penguin.cz/%7Eliterakl/intel/intel.html)
موفق باشید

ali.asady
سه شنبه 21 تیر 1390, 23:13 عصر
:خجالت::تشویق:بازم سلام و تشکر از گوشزد شما:قلب::بوس:

من معمولا از انتقادات و ‍پیشنهادت استقبال می کنم به خاطر همین هم از همه دوستانی که این تاپیک رو می بینند
خواهش می کنم حوصله به خرج بدند .
من طبق نظر این دوستمون سعی می کنم مطالب و دانسته های خودم رو که با تحقیق ومطالعه بدست آوردم به صورت منظم تری جمع جور کنم تا دوستان راضی باشند

البته قصد بنده حقیر از ارایه تاپیک این است که بنا به فرموده پیامبر گرامی اسلام :


هر چیزی را زکاتی است و زکات علم و تجربه ، آموختن آن است

pcdownload.bloghaa.com
جمعه 24 تیر 1390, 02:45 صبح
اگه میشه نحوه لود کردن یه کرنل ساده را هم از درون بوت لودر بفرمایید که خیلی درگیرشم.:لبخندساده:

ali.asady
دوشنبه 14 شهریور 1390, 21:49 عصر
اگه میشه نحوه لود کردن یه کرنل ساده را هم از درون بوت لودر بفرمایید که خیلی درگیرشم.:لبخندساده:

فایل ضمیمه رو دانلود کن
نمونه یه بوت لودر و کرنل از tab-os طریقه لود کرنل داخلش هست
داخل فایل های

_start32.s

1: movl $_stack_desc, %eax
lss (%eax), %esp

fninit
pushl %ebx
call _startKernel

/* this should never happen.
* but if we leave _start_kernel for any reason, we know where we go to
*/
jmp .

main.c
void _startKernel( struct sMultiBootInfo *psMultiBoot )

اگر کمک خواستی تا اونجا که از دستم بر می آید کوتاهی نمی کنم برام پیام بزار

joker
سه شنبه 15 شهریور 1390, 11:10 صبح
اگه میشه نحوه لود کردن یه کرنل ساده را هم از درون بوت لودر بفرمایید که خیلی درگیرشم.:لبخندساده:

شاید کمکت کنه دستت راه بیفته :)

http://shabgard.ir/forums/showthread.php?t=21974

.:saeed:.
چهارشنبه 16 شهریور 1390, 12:22 عصر
ببخشید که وسط بحثتون interrupt ! ایجاد میکنم. فقط خواستم تشکر کنم و خواهش کنم که حتما ادامه بدین . نمی دونم چه دلایلی وجود داره که افراد رغبت ندارند دانسته هاشون رو به دیگران انتقال بدند. به نظرم مهمترین دلیلش اینکه من نوعی میخونم و استفاده میکنم ولی تشکر نمی کنم . بازهم ببخشید که پا برهنه اومدم وسط بحث . امید وارم با بحث های تخصصی تر ادامه داشته باشه

.:saeed:.
چهارشنبه 16 شهریور 1390, 12:24 عصر
راستی یه پیشنهاد . اگه ممکنه در پایان هر جلسه یه فایل پی دی اف از اون جلسه واسه دانلود هم بذارید . چون نویسنده توی فایل word ( تبدیل میشه به pdf) قدرت مانور بیشتری داره.

ali.asady
جمعه 18 شهریور 1390, 00:24 صبح
عنوان درس

جدول پارتیشن درMBR/EBR



مثال واقعی جدول پارتیشن

در

هارد 20 گیگابایت (با NTFS، FAT32 و پارتیشن های لینوکس)
75317


این نمایش هگز فقط در آخرین 80 بایت در بخش MBR هارد دیسک است که به عنوان مثال ممکن است در ویرایشگر دیسک ظاهر می شود. جدول پارتیشن که در داخل خط نازک زرد رنگ در نمودار فوق نشان داده شده است.

دو مورد دیگر نیز در این نمودار نشان داده شده است :


خط ارغوانی اطراف بایت هگز A8 E1 A8 E1 "نمونه ای از امضا دیسک NT (که توسط سیستم عاملهای 2000/XP استفاده می شود)
این بخش کلمه امضای AA55h که فن آوری های قدیمی تر نامیده می شود.



[البته : 55AA در ویرایشگر هگزا در سیستم های پردازنده x86 اینتل، کلمات هگز با اولین بایت پایین و آخرین بایت بالا بنابراین AA55h به نظر می رسد به این عنوان ذخیره می شود].





در گوشه بالای سمت راست جدول، شما یک بایت با مقدار از 80را می ببینید. این بایت اول در ورودی اولین پارتیشن است ، و توسط بایتهای 01 01 00 دنبال شده و در اکثر هاردها این بایت ها، بعد از اولین بایت پارتیشن است که پارتیشن بوت را در دیسک سخت با بایت 80h مقدار دهی می‌کنند و بوت لودر (کد MBR) یا همان 446 بایت را با ابزار مثلاً pcopy در همان پارتیشن قرار می دهندو تلاش برای بارگذاری پارتیشن بوت فقط در مدخل یکی از پارتیشنها (در زمان راه اندازی سیستم) با بایت 80hاست انجام و چون سه بایت در ادامه مقدار (CHS 0،1،1 ) است که طبق محاسبه به سکتور با آدرس مطلق 63 از دیسک، بوت آغاز خواهد شد.


تا هاردهایی با حجم 8.4 گیگابایت، با بدست آوردن مقدار شروع و پایان CHS تعداد کل سکتورها و بدست آوردن حجم پارتیشنها به راحتی بدست می‌آمد ، که ممکن است به کمک آن تصحیح خطا برای مدخل دستی در پارتیشن تیبل باشد.
به عنوان مثال با مقدار (CHS 877،254،63) توسط محاسبات تعداد کل سکتورها از روش زیر بدست می آید
تعداد کل سکتورها= سیلندر * هدر * سکتور


14105070=878*255*63


وچون قبلاً گفتیم که بوت از آدرس 63 مطلق شروع می‌شود باید مقدار بدست آمده را از 63 کم کنیم



14105070-63=14105007

البته توضیح بدم این جدول پارتیشن و طرح نمونه ایجاد شده توسط یک سیستم عامل مایکروسافت نیست. در عوض تنها یک پارتیشن اولیه و پس از یک پارتیشن توسعه یافته، داره درایو دارای سه پارتیشن اولیه و پس از آن یک پارتیشن توسعه یافته است

75076


در جدول بالاشما متوجه خواهید که محاسبات مقادیر CHSهمواره به همین آسانی انجام نمی گیرد! اگرچه اولین بایت برای هر شروع و خاتمه دادن به مدخل CHS است که همواره از ضرب هد ، در سیلندر و سکتور بدست می آید! اما گاهی جهت محاسبه مقدار سکتور، شما باید منجر به دو بیت از بایت دوم (یا متوسط) حذف و در نتیجه بزرگترین مقدار شما می توانید برای یک سکتور است : 3Fh (__11 1111) = 63. برای محاسبه مقدار سیلندر، دو بیت از بایت میانی را به دو بیت اول یک عدد هگز اضافه می‌کنیم و یک عدد ده بیتی که با آخرین بایت در هر مدخل CHS به پایان می رسد. بنابراین ، بزرگترین مقدار شما می توانید برای یک سیلندر می باشد :

3FFh (11 1111 1111) = 1023 (که در جدول، شما تعداد 1024 سیلندر می دهد).
از آنجا که این بزرگترین مقادیر است که می تواند در هر جدول پارتیشن استاندارد مورد استفاده قرار گیرد


1024 x 255 x 63 = 16450560


16450560 x 512 = 8422686720
(یا 8422686720 بایت)، بنابراین حد 8.4 گیگابایت برای هر BIOS بدون INT جدید 13 ضمیمه ها (مانند توابع 42 ، 43 و 48 برای خواندن ، نوشتن و به دست آوردن پارامترهای درایو)!

بنابراین ، زمانی که یک پارتیشن بیشتر از 8.4 گیگابایت در یک درایو باشد بعضی از افزونگی در بخش آخرین سکتور در حالت CHS در این ورودی دیده شود .


75108


اگر تعداد سیلندر تا 1023 محدود نبود ، ارزش سیلندر، آخرین سکتور در حالت CHS سه گانه می تواند به شرح زیر محاسبه کرد
(14105070 + 12289725)/(255*63) = 1643 سیلندر
یا
26394795/ 16065=1643
که سکتور26394795 همان آدرس مدخل بعدی است ! بنابراین در حالت CHS مقدارها به ترتیب C=1643/H=254/S=63خواهد شد؟
برای هر پارتیشن که فراتر از 8.4 گیگابایت باشد ، به عنوان مثال مانند دو آخرین ورودی در جدول پارتیشن ما، تنها ارزش در داخل خط نازک سبز را می تواند برای محاسبه هر دو اندازه واقعی یک پارتیشن و مکان آن مورد استفاده قرار گیرد.
حال به هر دو سکتور (شروع و پایان) در مدخل سوم جدول پارتیشن مثال ما توجه کنید

75318



در نهایت ، ورودی چهارم در جدول مثال ما که شامل یک پارتیشن LBA توسعه یافته (نوع 0Fh) است. در مورد هر پارتیشن توسعه یافته،که شامل تمام پارتیشن های منطقی است که ممکن است در آن وجود داشته باشد، که یک یا چند درایو می‌تواندباشد. پارتیشن توسعه یافته، اغلب تمام هارد را تا پایان پوشش می دهد، اما اجباری نیست. همچنین باید توجه کنید که حتی اگر تمام چهار ورودی یک جدول پارتیشن استفاده شود، به این معنی نیست هیچ فضای خالی بر روی یک درایو وجود نداشته باشد


75319






MBR:Master Boot Record

EBR:Extended Boot Recoed


پایان این جلسه
واین داستان ادامه دارد

ali.asady
پنج شنبه 24 شهریور 1390, 02:24 صبح
این هم ، همه اطلاعات به صورت پی دی اف

75321:بوس:

لطفا به نظر سنجی پاسخ دهید:تشویق:

متشکرم:خجالت:

ali.asady
شنبه 26 شهریور 1390, 01:49 صبح
من یک فایل دی اسمبل شده از یه بوت فایل ویندوز 98 گرفتم
دوستان هم ببینند ونظر بدهند شاید ما هم چیزی یاد گرفتیم

ali.asady
پنج شنبه 21 مهر 1390, 23:41 عصر
EBR : Extended Boot Record





مقدمه‌ای بر پارتیشن توسعه یافته
پارتیشن توسعه یافته زنجیره ای است، تو در تو نیست

بوت رکورد توسعه یافته در ساختار به MBR مشابه است، اما اکثریت از آنها 446 بایت اول صفر پر شده است چیزی بجز داده های جدول پارتیشن و بوت رکورد امضا AA55h دارند؛ ممکن است برنامه نویسان در موارد استثناء برای نوشتن کد برنامه مانند وبروس maxblast از آن استفاده کنند



76569


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

76570
این هم نمونه واقعی

76571



از نظر ما نسخه برداری و ذخیره سازی داده های موجود در هر سکتور EBR جهت بازیابی اطلاعات مهم است این کپی در جای دیگر ( نه در همان دیسک سخت) نگهداری شود یا می توان تنها بایت داده را ازهر یک از ورودی های جدول پارتیشن قرارداد مانند نوت بوکها.
اگر سیستم عامل دیگر نمی تواند محتویات هر سکتور EBR را فراخوانی کند، شما بهتراست به رفع اشکال (و یا بازیابی اطلاعات خود را) و محتویات این جدول داشته باشید!
برای مثال برنامه Partinfo لیست تمام بوت رکوردها پیشرفته را به صورت زنجیره نمایش می کند
اما حتی اگر داده های جدول پارتیشن را حذف کنید و با بازنویسی سکتور MBR، شما هنوز هم می توانید پارتیشن های خود را با استفاده از به عنوان مثال TestDisk بازیابی کنید.




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

اگر چه همه درایو محلی (یا پارتیشن) در داخل یک پارتیشن توسعه یافته هستند یا بعنوان مثال کلیه ی درایو منطقی در داخل پارتیشن های قبلی تو در تو هستند این واقعیت را با برنامه‌های نمایش سکتورها و دستیابی به آن‌ها می توان مشاهده کرد .لیکن همواره EBRs با داده های جدول پارتیشن (و پارتیشن های مربوطه) به همین شیوه در ویندوز 2000 یا XP مدیریت دیسک MMC (در شکل بالا )نمایش داده می شود :



در مدیریت دیسک MMC (شکل بالا) هر درایو منطقی بطور مستقل و داخل پارتیشن توسعه یافته نشان می‌دهد در واقع ، داده ها در اولین EBR و هر یک از لینک متوالی EBR پارتیشن های منطقی خود را نشان می دهد، مانند آویز چسبیده به دیوار توسط یک زنجیره نخ نامرئی .
ساختارهای مختلف دیسک و مناطق آن در شکل زیر نشان داده شده است اکنون هر قسمت با برچسب با شماره قرمز در نمودار را توضیح می دهم



76597


1:MBR (مستر بوت رکورد) است که همیشه در اولین بخش از هر دیسک سخت در LBA 0 یا CHS (0 ، 0، 1) واقع است
در سیستم عاملهای جدید مثلا مایکروسافت ویندوز ویستا به بعد بخش اول مانند دیگرMBR ها ظاهر نمی‌شود ، و ممکن است برنامه ابزار قدیمی پارتیشنهای ویستا خراب کرده یا نشان دهند و آن را تنها به به عنوانی فضای تخصیص نیافته بدون نوشته های پارتیشن جدول قدیمی بشناسند .
(رجوع کنید به : GUID جدول پارتیشن برای اطلاعات بیشتر به جدول پارتیشن واقعی در سیستم‌های 64 بیتی).
2: منطقه صورتی رنگ با برچسب 2 که در نمودار نشان داده شده است که گاهی اوقات به نام "منطقه رزرو شده "(حفاظت شده) و شامل بخش MBR و سکتورهای آن است
اندازه آن برابر با تعداد سکتور در ترک (یا هد که معمولا 63 برای اکثر درایوها) و63 منهای سکتور MBR مساوی 62 سکتور می‌شود این منطقه در همه "دیسک های سخت با پارتیشن اولیه یافت ، و آن را" استفاده نشده "توسط سیستم عامل می گویند، شما ممکن است برخی از داده بسیار جالب در آن پیدا کنید.
وقتی که گراب، و یا برخی بوت منیجر دیگری، نصب می‌کنید بوت MBR ممکن است از ده ها بخش و یا پس از این منطقه با بخشی از خود( stage2 ) آن را پر کند.
در ویروس های قدیمی معمولاً از این قسمت برای مقیم شدن ویروس های ddo و غیره استفاده می‌شد

مناطق 3، 4 و 6 اولین - دومین - و چهارم پارتیشن اولیه بر روی این دیسک با اطلاعات در مورد مکان های آنها و اندازه به طور معمول یافت می شود،مگر اینکه برخی از سیستم عامل ها و یا ابزار و برنامه بصورت سفارشی آنها را ترکیبی استفاده کنند.توجه کنید در ابزار پارتیشن بندی FDISK مایکروسافت و آی بی ام برای بیش از یک پارتیشن اولیه ایجاد نمی کند که قبل از یک پارتیشن توسعه یافته ایجاد می شود. ابزارهای مدیریت دیسک ویندوز ™ 2000 و بعد از انجام این کار محدودیت ندارد. بنابراین ، پارتیشن اولیه در 4 (2) و 6 (4) می تواند تحت سیستم عامل ها ایجاد شود


7 : این منطقه "فضای آزاد" که توسط کاربر پارتیشن نشده است


8 :اولین سکتور EBR ( بوت رکورد توسعه یافته) در پارتیشن توسعه یافته.


9:فضای بین پارتیشن (همچنین نوارهای صورتی را در کنار 9 -11-14 ببینید).این منطقه بین تمام سکتور های EBR و پارتیشن های آنها شبیه به "منطقه بلا استفاده" بین MBR و محل اولین پارتیشن روی یک دیسک پایه است.اغلب اندازه آن برابر تعداد سکتور در هد (یا SPT، سکتور در ترک) منهای یک (سکتور EBR)، مساوی 62 سکتور است


10 : فضای استفاده نشده. احتمالا اولین درایو منطقی ایجاد شده در داخل پارتیشن توسعه یافته است ، ممکن است بعدا، آن را حذف کرده اند. پس از حذف اشاره ازمدخل پارتیشن خود ، درEBR اول برداشته، و تنها لینک به سکتورEBR پارتیشن منطقی بعدی اشاره می کند

11 : EBR برای پارتیشن درایو منطقی در 12 و همچنین اشاره گر به سکتور EBR در 14.

12: یک پارتیشن منطقی معتبر در پارتیشن توسعه یافته، می تواند فرمت شده یا فرمت نشده باشد،برای نوع پارتیشن شما نیاز به بررسی مدخل پارتیشن خود واقع در بوت رکورد معتبر دارید.


13: فضای استفاده نشده.این منطقه می تواند قسمتی از پارتیشن اصلی توسعه یافته در درایو دوم منطقی ایجاد شده باشد، و با برخی از برنامه های سودمند، مانند پارتیشن مجیک ، تغییر سایز انجام شده و یا ممکن است پارتیشن توسعه یافته شامل 3 یا 4 پارتیشن های منطقیبوده که بعدا حذف شده اند
اگر پارتیشن را پاک می کنید و این مورد ازابزار یا سیستم عامل، استفاده می‌کنید ورودی EBR ویرایش می‌گردد مثال ورودی EBR 11 به پیش سکتور اصلی EBR اشاره می‌کند و برنامه ها به سادگی درایو منطقی را حذف نمی‌کنند در جدول ورودی پارتیشن اشاره گر به EBR پارتیشن بعدی اشاره می‌کند و بخش اطلاعات باقی می‌ماند.مانند 14 EBR

14 :آخرین EBR در داخل این پارتیشن توسعه یافته است.

15 : یکی دیگر از پارتیشنهای منطقی معتبر یا درایو در داخل پارتیشن توسعه یافته است.

16 : فضای استفاده نشده. در پایان از پارتیشن توسعه یافته است.

ali.asady
جمعه 22 مهر 1390, 19:08 عصر
التماس دعا

ali.asady
یک شنبه 24 مهر 1390, 17:43 عصر
بررسی کدهای اسمبلی

armin.g
یک شنبه 25 دی 1390, 15:17 عصر
با سلام خدمت دوستان عزیز،
من با سرچ به این تاپیک رسیدم،
درسته که فقط 2 صفحه مطلب عنوان شده ولی با توجه به بار مفهومی هر درس استاد عزیزم، کمی طول میکشه به دوستان برسم.
فقط می خواستم دو تا خواهش کنم، 1- لطفاً کمی مطالب رو بسط بدید که بنده نوعی که اطلاعات کمتری داریم هم بتونیم بهره ببریم (البته تا جایی که مطالب بیش از حد طولانی نشه، مثلاً کافیه Refrence های خوبی از برخی از مواردی که بنظرتون برای ماها نامانوسه بزارید تا بریم تحقیق کنیم) 2- کاربرد من از این مطلب، ساخت یک سیستم عامل بسیار سادس که بتونه خودش رو به CPU یا هر نوع پردازنده ای که قدرتش رو داشته باشه معرفی کنه تا بتونه در لایه KingSpace روتین هاش رو اجرا کنه. می گم که هنوز به انتهای مطلب نرسیدم، ولی ممنون می شم با داشتن این ذهنیت، جاهایی که لازم می بینید یه توضیحاتی هم در این سطح ارائه کنید(شاید هم تو مطالب باشه و من هنوز نرسیدم، که اگر اینطوره عذر می خوام)
بهرحال بسیار مطلب جالب توجهیه، امیدوارم با انرژی دنبالش کنید.

unknown.unforgiven
چهارشنبه 05 بهمن 1390, 11:30 صبح
با سلام و تشکر به خاطر تاپیک آموزشی خوبتون
من تاپیک رو از پست اول تا آخر خوندم، یه سیستم ساده هم نوشتم، باهاش بالا اومدم و یک سری کارها رو براش تعریف کردم ولی متاسفانه نتونستم قسمت نصب رو بنویسم. برای مثال سیستم از روی فلش که بالا اومد یه قابلیت نصب هم داشته باشه که بتونه سیستم رو روی هارد بارگذاری کنه تا بشه بعد از اون بدون استفاده از فلش، سی دی یا فلاپی از روی هارد سیستم بالا بیاد (مثل اینکه دو تا ویندوز داشته باشیم و اول کاری ازمون بپرسه که با کدوم بالا بیاد). از دوستان اگه کسی میتونه لطفاً من رو راهنمایی کنه یا بگه که دنبال چی باید بگردم.
پینوشت: با نظر بعضی دوستان موافقم که مطالب رو هوا داره گفته میشه و میشه بیشتر توضیحشون داد. اگر خودم به حدی برسم که بتونم توضیح بدم حتماً این کار رو میکنم که این تاپیک بهتر بشه

IamOverlord
چهارشنبه 05 بهمن 1390, 19:36 عصر
خلاصه بگم که باید مستقیما روی Sector های HD بنویسی خود برنامه ات رو...

unknown.unforgiven
چهارشنبه 05 بهمن 1390, 20:25 عصر
خلاصه بگم که باید مستقیما روی Sector های HD بنویسی خود برنامه ات رو...

ممنون از پاسختون، اما میشه لطف کنید یه خورده بیشتر توضیح بدید یا لینکی معرفی بکنید؟ رو چه سکتورایی؟

IamOverlord
چهارشنبه 05 بهمن 1390, 20:28 عصر
wiki.osdev.org/ATA_read/write_sectors (http://wiki.osdev.org/ATA_read/write_sectors)

بدون استقاده از وقفه ی 13h این کارو می کنه یعنی با IN و OUT.

unknown.unforgiven
چهارشنبه 05 بهمن 1390, 20:34 عصر
wiki.osdev.org/ATA_read/write_sectors (http://wiki.osdev.org/ATA_read/write_sectors)

بدون استقاده از وقفه ی 13h این کارو می کنه یعنی با IN و OUT.

دوست عزیز نگفتید رو چه سکتورهایی باید بنویسم

IamOverlord
چهارشنبه 05 بهمن 1390, 20:40 عصر
مکان Boot Loader همون اولین Sector دیسک هست، که همون طور که قبلا دیگران هم توضیح دادند باید حجمش 510 بایت باشه و بایت های 511 تا 512 با مقدار AA55 در مبنای 16 پر شده باشه.

am_abbas65
سه شنبه 27 آبان 1393, 08:58 صبح
با سلام خدمت اساتید میخواستم بدونم فایل بوتی که ساختیم رو چطور میتونیم روی فلش مموری بریزیم تا بجای فلاپی سیستم رو با فلش راه اندازی کنیم.خیلی در اینترنت گشتم ولی اکثر کدها برای فلاپی دیسک میباشد. الان فایل بوت من آماده هست ولی نمیدونم چجور رو فلش بریزم .

xman_1365_x
سه شنبه 27 آبان 1393, 15:17 عصر
با سلام خدمت اساتید میخواستم بدونم فایل بوتی که ساختیم رو چطور میتونیم روی فلش مموری بریزیم تا بجای فلاپی سیستم رو با فلش راه اندازی کنیم.خیلی در اینترنت گشتم ولی اکثر کدها برای فلاپی دیسک میباشد. الان فایل بوت من آماده هست ولی نمیدونم چجور رو فلش بریزم .


دوست عزیز بهتر بود بجای بالا آوردن این تاپیک سوالتون رو در تاپیک جدیدی مطرح میکردین، البته اگر قبلش جستجو میکردین سریعتر به جواب سوالتون می رسیدید.
http://forum.osdev.org/viewtopic.php?f=1&t=27432&start=0
موفق باشی

ali.asady
چهارشنبه 08 بهمن 1393, 02:32 صبح
اگه فلش به عنوان هارد دیسک دومی باشه به جای h0 از h1 استفاده کنید



PARTCOPY source source_offset length destination destination_offset

partcopy bootsec.bin 0 200 -h0

partcopy A:disk_0.bak 0 200 -h1

reza_noei
جمعه 24 بهمن 1393, 18:39 عصر
سلام
خسته نباشید، من یک بوت لودر نوشتم و با نرم افزار مقلد qemu اون رو امتحان کردم.
با استفاده از دستور dd بوت لودرم رو در ابتدای حافظه فلش خودم نوشتم اما وقتی از روی فلش سیستم
رو بوت میکنم هیچ اتفاقی نمیفته گاهی فقط جای مکاننما تغییر میکنه و صفحه کاملا خالیه.
میخواستم بدونم مشکل از فلش منه یا ممکنه جدول وقفه های سیستم من متفاوت بوده باشند؟

ali.asady
چهارشنبه 06 اسفند 1393, 03:01 صبح
دستور مربوط به کپی بوت لودر با DD

کپی بوت لودر یک هارد به هارد دیگر هارد ها یکسان باشند

dd if=/dev/sda of=/dev/sdb bs=512 count=1

کپی بوت لودر یک پارتیشن به پارتیشن دیگر


# dd if=/dev/sda of=/tmp/mbrsda.bak bs=512 count=1

# dd if=/tmp/mbrsda.bak of=/dev/sdb bs=446 count=1

کپی فایل بوت یه دیسک

dd if=backup-sda.mbr of=/dev/sda

payam200525
یک شنبه 07 تیر 1394, 08:26 صبح
سلام دوست من...آیا ممکن هست این تاپیک را با یک مثال عملی همراه کنید؟
مثلا از اولین پله تا بوت کامل و سپس چک سخت افزاری و دیدن درایور بوت روی اسکرین و در نهایت بوت اولین فایل از درایور بوت (چیزی شبیه بوت ویندوز)

reza_noei
دوشنبه 08 تیر 1394, 21:04 عصر
سلام دوست من...آیا ممکن هست این تاپیک را با یک مثال عملی همراه کنید؟
مثلا از اولین پله تا بوت کامل و سپس چک سخت افزاری و دیدن درایور بوت روی اسکرین و در نهایت بوت اولین فایل از درایور بوت (چیزی شبیه بوت ویندوز)

سلام
یک کتاب هست نوشته ی آقای نیک بلاندل writing a Simple Operating System from scratch که به شما نوشتن یک سیستم عامل ساده را یاد میدهد.
البته مثل اینکه این کتاب هنوز هم کامل نشده ولی به هر حال خیلی به من کمک کرد. البته سری ویدئوهایی هم از ایشون در یوتیوب هست که نوشتن بوت لودر رو آموزش میدهند
حدود 9 ساعت آموزش تصویری دارند.
لینک کتاب :
http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf

اما برای ادامه میتونید با اطلاعاتی که به دست آوردید میتونید مجموعه آموزشی BrokenThorn را مطالعه بفرمائید :
http://www.brokenthorn.com/Resources/OSDevIndex.html

من امسال کنکور دارم و فرصت نداشتم از این جلو تر برم. توصیه میکنم اگه زبانت خوبه در انجمن http://forum.osdev.org/ عضو بشی
اطلاعات زیادی را در این انجمن پیدا خواهید کرد. اگه سوالی هم داشتید تا جایی که اطلاعات داشته باشیم کمکتون میکنیم.