# برنامه نویسی سطح پایین > برنامه نویسی اسمبلی خانواده x86 > آموزش: بوت لودر و جدول پارتیشن

## ali.asady

آموزش نوشتن اولین بوت لودر

یک بوت لودر باید خصوصیات زیر را داشته باشد
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

در این جلسه درباره خدول تخصیص  پارتیشن ها (Partition Table) و محل قرار گیری بوت لودر توضیحاتی خدمتتان عرض می کنم
partition_table_c.gif

همانطور که در این عکس می بینید 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    

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

part.gif

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

----------


## xman_1365_x

با تشکر از دوست گرامی
چیزی که دوستان ندیدم اینجا یا جای دیگه ازش حرفی بزنند ،اونم اینه که نوشتن دستورات وقتی محدودیت حافظه داریم مثلا نوشتن بوت لودر یا برنامه برای رام اینه که باید به اندازه دستورات توجه داشت و  تا جایی که میشه از دستورات مشابه که بایت کمتری اشغال میکنه استفاده کنیم موارد دیگه میتونه وقفه های مورد استفاده باشه(در برنامه های بزرگ سرعت اجرا و کارامد بودن که در همین حد توضیح در این بحث کافیه) که روی هر سیستم سازگاری داشته باشه البته فکر میکنم بهتر میبود بحث لودر رو تمام میکردین بعد ادامه میدادین 
موفق باشی

----------


## ali.asady

> با تشکر از دوست گرامی
> چیزی که دوستان ندیدم اینجا یا جای دیگه ازش حرفی بزنند ،اونم اینه که نوشتن دستورات وقتی محدودیت حافظه داریم مثلا نوشتن بوت لودر یا برنامه برای رام اینه که باید به اندازه دستورات توجه داشت و  تا جایی که میشه از دستورات مشابه که بایت کمتری اشغال میکنه استفاده کنیم موارد دیگه میتونه وقفه های مورد استفاده باشه(در برنامه های بزرگ سرعت اجرا و کارامد بودن که در همین حد توضیح در این بحث کافیه) که روی هر سیستم سازگاری داشته باشه البته فکر میکنم بهتر میبود بحث لودر رو تمام میکردین بعد ادامه میدادین 
> موفق باشی


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

----------


## xman_1365_x

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


دوست عزبز اینکه لازم و ملزومه درست اما فکر میکنم اگر جای دو پست اول و دوم به همراه یک مقدمه میومد خیلی خوب میشید و در ادامه و شروع به نوشتن بوت لودر کنید که نمیدونم تا چه سطحی پیش میرین
(به زبان ساده تر برای دوستان مبتدی مثل من که نمیدونم بوت لودر چیه باعث سردرگمی نشه این نظر شخصیمه)




> من منظورت رو از سوال  نوشتن دستورات وقتی محدودیت حافظه داریم رو درست نفهمیدم 
> یعنی اینطوری برداشت کردم که اگه 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*
موفق باشید

----------


## ali.asady

:خجالت:  :تشویق: بازم سلام و تشکر از گوشزد شما :قلب:  :بوس: 

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

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

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

----------


## pcdownload.bloghaa.com

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

----------


## ali.asady

> اگه میشه نحوه لود کردن یه کرنل ساده را هم از درون بوت لودر بفرمایید که خیلی درگیرشم.


 فایل ضمیمه رو دانلود کن
نمونه یه بوت لودر و کرنل از 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

> اگه میشه نحوه لود کردن یه کرنل ساده را هم از درون بوت لودر بفرمایید که خیلی درگیرشم.


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

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

----------


## .:saeed:.

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

----------


## .:saeed:.

راستی یه پیشنهاد . اگه ممکنه در پایان هر جلسه یه فایل پی دی اف از اون جلسه واسه دانلود هم بذارید . چون نویسنده توی فایل word ( تبدیل میشه به pdf) قدرت مانور بیشتری داره.

----------


## ali.asady

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

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

در

هارد 20 گیگابایت (با NTFS، FAT32 و پارتیشن های لینوکس)
Screenshot-1.jpg

 این نمایش هگز فقط در آخرین 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
                                  البته توضیح بدم این جدول پارتیشن و طرح نمونه  ایجاد شده توسط یک سیستم عامل مایکروسافت نیست. در عوض تنها یک پارتیشن اولیه و پس از یک پارتیشن توسعه یافته، داره درایو دارای سه پارتیشن اولیه و پس از آن یک پارتیشن توسعه یافته است
Screenshot-1.png

                                  در جدول بالاشما متوجه خواهید که محاسبات مقادیر 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 در این ورودی دیده شود .


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

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

4.png



  MBR:Master Boot Record

 EBR:Extended Boot Recoed

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

----------


## ali.asady

این هم ، همه اطلاعات به صورت پی دی اف

pt.zip :بوس: 

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

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

----------


## ali.asady

من یک فایل دی اسمبل شده از یه بوت فایل ویندوز 98 گرفتم
دوستان هم ببینند ونظر  بدهند شاید ما هم چیزی یاد گرفتیم

----------


## ali.asady

*EBR : Extended Boot Record*
 

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


Screenshot.png

    محتویات معمول بوت رکورد یک جدول پارتیشن توسعه یافته 
 Screenshot-1.png 
                                 این هم نمونه واقعی
EBR2.gif

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

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

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

EBRreality.png

 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

التماس دعا

----------


## ali.asady

بررسی کدهای اسمبلی

----------


## armin.g

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

----------


## unknown.unforgiven

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

----------


## IamOverlord

خلاصه بگم که باید مستقیما روی Sector های HD بنویسی خود برنامه ات رو...

----------


## unknown.unforgiven

> خلاصه بگم که باید مستقیما روی Sector های HD بنویسی خود برنامه ات رو...


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

----------


## IamOverlord

wiki.osdev.org/ATA_read/write_sectors

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

----------


## unknown.unforgiven

> wiki.osdev.org/ATA_read/write_sectors
> 
> بدون استقاده از وقفه ی 13h این کارو می کنه یعنی با IN و OUT.


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

----------


## IamOverlord

مکان Boot Loader همون اولین Sector دیسک هست، که همون طور که قبلا دیگران هم توضیح دادند باید حجمش 510 بایت باشه و بایت های 511 تا 512 با مقدار AA55 در مبنای 16 پر شده باشه.

----------


## am_abbas65

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

----------


## xman_1365_x

> *با سلام خدمت اساتید میخواستم بدونم فایل بوتی که ساختیم رو چطور میتونیم روی فلش مموری بریزیم تا بجای فلاپی سیستم رو با فلش راه اندازی کنیم.خیلی در اینترنت گشتم ولی اکثر کدها برای فلاپی دیسک میباشد. الان فایل بوت من آماده هست ولی نمیدونم چجور رو فلش بریزم .
> *


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

----------


## ali.asady

اگه فلش به عنوان هارد دیسک دومی باشه به جای 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

سلام 
خسته نباشید، من یک بوت لودر نوشتم و با نرم افزار مقلد qemu اون رو امتحان کردم. 
با استفاده از دستور dd بوت لودرم رو در ابتدای حافظه فلش خودم نوشتم اما وقتی از روی فلش سیستم 
رو بوت میکنم هیچ اتفاقی نمیفته گاهی فقط جای مکاننما تغییر میکنه و صفحه کاملا خالیه.
میخواستم بدونم مشکل از فلش منه یا ممکنه جدول وقفه های سیستم من متفاوت بوده باشند؟

----------


## ali.asady

دستور مربوط به کپی بوت لودر با 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

سلام دوست من...آیا ممکن هست این تاپیک را با یک مثال عملی همراه کنید؟ 
مثلا از اولین پله تا بوت کامل و سپس چک سخت افزاری و دیدن درایور بوت روی اسکرین و در نهایت بوت اولین فایل از درایور بوت (چیزی شبیه بوت ویندوز)

----------


## reza_noei

> سلام دوست من...آیا ممکن هست این تاپیک را با یک مثال عملی همراه کنید؟ 
> مثلا از اولین پله تا بوت کامل و سپس چک سخت افزاری و دیدن درایور بوت روی اسکرین و در نهایت بوت اولین فایل از درایور بوت (چیزی شبیه بوت ویندوز)


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

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

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

----------

