|
سلام به همه دانشجویان
قبل از اینکه موضوع اصلی این پست رو مطرح کنم لازم می دونم یه موضوع کوتاه رو یا شما در میون بگذار.همون طوری که می دونین انجمن علمی کامپیوتر از ماه اردیبهشت به همت همکلاسی های ما دوباره شروع به کار کرد و از همون موقع بچه ها دارن با جان و دل کار می کنن تا هم سطح علمی دانشجوهای خودمون بالاتر بره هم اسم دانشگاه مطرح بشه . یکی از کارهایی که انجمن ماه ها است داره روش کار می کنه برگزاری همایش علمی و تخصصی با عنوان هک و نفوذ در شبکه است . اهداف این همایش اینه که مسئله هک و روش های اون از نظر تخصصی بررسی بشه تا شاید هم دید عمومی نسبت به این موضوع از یک ضد ارزش به یک موضوع کاملا علمی و جالب تغییر پیدا کنه و هم روش های مقابله با نوع بد اون به دانشجویان آموزش داده بشه . به این منظور اساتید بزرگی از تهران و از دانشگاه های مطرح کشور دعوت شدن و خلاصه کلام این که تمام سعی بر این شده که یک همایش کاملا علمی و تخصصی و در عین حال جذاب و جالب برای شما ترتیب داده بشه . اما برای اینکه شما هم در اهداف این همایش شریک باشید در کنار ارائه مقاله توسط اساتید بخشی هم برای ارائه مقاله توسط دانشجویان قرار داده شده . به این ترتیب که هر کدوم از شما هر اطلاعی و در هر سطحی که از موضوع هک دارید رو در یک مقاله جمع آوری می کنید و به آدرس پست الکترونیکی انجمن یعنی j.computer.sd@gmail.com می فرستید . این مقاله ها در واحد علمی انجمن بررسی می شن و در صورت تائید از شما دعوت میشه تا روز همایش مقاله خودتون رو ارائه بدین . در ضمن از مقاله های برتر روز همایش با اهدای جوایز خیلی خوب تقدیر میشه . پس وقت رو تلف نکنین و همین الان دست به کار بشین .
و اما موضوع اصلی این پست :
مسلما تا حالا متوجه شدین که بین زبان ها برنامه نویسی از نظر سطح چه قدر تفاوت وجود داره و واقعا فرق یک زبان سطح بالا ( مثل سی شارپ ) با یک زبان سطح پایین ( مثل اسمبلی ) از زمین تا آسمونه . به عنوان مثال اگر یادتون باشه وقتی که در محیط Visual Studio یک برنامه می نوشتیم به طور خودکار خطا های برنامه ما مشخص می شد و ما می فهمیدیم کجای برنامه ما ایراد داره تا رفعشون کنیم . اما در اسمبلی دیگه از این خبرا نیست یعنی علی رقم اینکه تعداد خطهای برنامه بیشتر می شه اما خطایابی مثل اون چه که در سی شارپ دیدین وجود نداره . اما به دلیل اهمیتی زبان ماشین همه دانشجویان کامپیوتر مجبور به یادگیری اون هستند . و به دلیل این که نوشتن یک برنامه به صورت عملی با کامپیوتر برای یادگیری زبان برنامه نویسی ضروریه من نحوه نوشتن یک برنامه اسمبلی با کامپیوتر رو توضیح می دم.
به طور کلی برای نوشتن یک برنامه به زبان اسمبلی دو روش وجود داره . روش اول استفاده از اسمبلرها و لینکر ها است و روش دوم استفاده از ایمولیتور (Emulator ) است . روش اول علمی تره اما کارهای زیادی باید انجام بشه تا در نهایت یک فایل اجرائی ( با پسوند exe ) تولید بشه و از این لحاظ یه کمی سخت تر است . روش دوم هر چند به دلیل اینکه از بعضی از خطاهای کاربر چشم پوشی میکنه از نظر علمی ارزش کمتری داره اما از نظر آموزشی واقعا مفیده و به کاربر کمک زیادی می کنه . مثلا وقتی یک برنامه اسمبلی رو با Emulator می نویسید می تونید برنامه تون رو trace کنید ( مشابه اونچه در سی شارپ انجام می شد ) و در هر مرحله مقدار ثبات های عمومی و ثبات های سگمنت و فلگ ها و IP رو ببینید و این به درک برنامه ای که نوشتین کمک زیادی می کنه . اما هرچند استفاده از Emulator فعلا توسط آقای بیگی حرام اعلام شده اما من هر دو روش رو توضیح می دم .
روش اول - استفاده از اسمبلر
همون طوری که گفتم متداول ترین و علمی ترین روش برای نوشتن بک برنامه به زبان اسمبلی استفاده از این روش است . برای این کار نیاز شما نیاز به یک اسمبلر و یک لینکر دارید . من در پایین لینک دانلود اسمبلر MASM و یک یک لینکر رو می گذارم . این دو برنامه با توجه به حجم کمی که دارن به راحتی و در عرض چند ثانیه قابل دانلود هستند . فقط کافی است روی لینک های زیر کلیک کنید :
دانلود برنامه MASM - حجم : ۱۲۲کیلوبایت
دانلود Linker - حجم : ۱۱۴ کیلوبایت
بعد از این که این دو برنامه رو دانلود و روی کامپیوتر خودتون ذخیره کردید مراحل زیر رو دنبال کنید :
مرحله اول
برای شروع کار شما باید برنامه خودتون رو در Notpad ویندوز بنویسید و اون رو با پسوند asm ذخیره کنید . برای این کار در منوی start در ویندوز xp روی گزینه All Programs کلیک کنید و از آنجا در منوی Accessories گزینه Notpad رو انتخاب کنید.در صفحه جدید که اکنون مقابل شماست برنامه اسمبلی مورد نظرتون رو بنویسید . فقط توجه داشته باشید که همون طور که گفتم اینجا امکان خطایابی مثل سی شارپ وجود نداره پس نوشتن برنامه رو با نهایت دقت انجام بدین . بعد از اینکه نوشتن برنامه به اتمام رسید در محیط Notpad روی گزینه Files کلیک کرده و Save as رو انتخاب کنید.در اینجا باید جایی که می خواهید برنامه ذخیره بشه انتخاب کنید.به عنوان مثال درایو C رو انتخاب کنید و در جایی که نوشته File name باید یک اسم اختیاری انتخاب کنید و در پایان اسمی که گذاشتید asm. رو تایپ کنید.در اینجا ما از نام example.asm استفاده می كنیم. یعنی در مقابل File name می نویسیم : example.asm . اکنون برنامه ما به شکل یک فایل متنی با به نام example و پسوند asm در درایو C ذخیره شده
مرحله دوم
پس از نوشتن كد، نوبت به اسمبل كردن یا ترجمه كد به زبان ماشین است.برای این کار برنامه MASM که دانلود کردید را اجرا کنید. و در اینجا شما باید آدرس فایل با پسوند asm که در مرحله قبل ساختیم را تایپ کنیم . در این مثال که ( نام فایل ما example و در درایو c بود ) تایپ می کنیم :
c:\example.asm
و سپس كلید Enter را می فشاریم. در این قسمت، از ما می خواهد كه نام فایل با پسوند obj را مشخص كنیم. در صورتی كه مقداری وارد نشود و فقط كلید Enter فشرده شود، با همان نام پیش فرض (در اینجا، example)، فایل با پسوند obj ساخته خواهد شد مثلاً در مثال ما، نام فایل ترجمه شده، example.obj خواهد بود. مرحله بعدی، تولید فایل لیست برنامه با پسوند LST می باشد. فایل لیست، حاوی برنامه به زبان ماشین و لیست برنامه به زبان اسمبلی و احتمالاً اشتباهات برنامه می باشد. اگر برنامه شما حاوی خطا باشد، این فایل به درد می خورد. در این قسمت اگر نیاز به تولید فایل لیست دارید، حتماً باید نامی انتخاب و تایپ كنید. در غیر این صورت با زدن كلید Enter، هیچ فایل لیستی تولید نخواهد شد.مرحله بعد هم که تولید فایل CRF میباشدکه اگر چیزی تایپ نکنید و کلید Enter را فشار دهید هیچ فایل CRF تولید نخواهد شد.
درنهایت در این مرحله شما یک فایل با پسوند obj ساخته اید که در همان جایی که فایل asm خود را قرار داده اید ذخیره شده شده
مرحله سوم:
برنامه مترجم، برنامه اسمبلی را به زبان ماشین ترجمه می كند ولی نمی تواند كلیه آدرسهای دادهها و دستورات برنامه را در حافظه مشخص كند. این وظیفه، بر عهده برنامه پیوند دهنده LINK.EXE می باشد . پس برنامه LINK.EXE که دانلود کردید را اجرا کنید . در اینجا شما باید آدرس فایل با پسوند obj که در مرحله قبل ساختیم را تایپ کنیم . در این مثال که ( نام فایل ما example و در درایو c بود ) تایپ می کنیم :
c:\example.obj
و سپس كلید Enter را می فشاریم.در خط بعدی از ما خواسته می شود نام فایل اجرایی برنامه را تایپ کنیم .در صورتی كه مقداری وارد نشود و فقط كلید Enter فشرده شود، با همان نام پیش فرض (در اینجا، example)، فایل با پسوند exe ساخته خواهد شد مثلاً در مثال ما، نام فایل اجرایی، example.exe خواهد بود. پس از تعیین نام فایل اجرایی، نام فایل MAP كه حاوی نام بخشهای مختلف برنامه و آدرس وابسته به آنان می باشد را از شما می خواهد. مقدار پیش فرض، NULL میباشد به عبارتی اگر كلید Enter فشرده شود، هیچ فایلی ساخته نخواهد شد. پیام بعدی، فایلهای كتابخانه است كه شامل روالهای آماده می باشد كه در حالت عادی به آنها نیازی نمی باشد و می توانید كلید Enter را بفشارید تا فایلی تولید نشود. نكته: از مرحله فایل MAP به بعد می توانید كلید Enter را بفشارید چون به آنها نیازی نیست.
پس از این که این مرحله را انجام دادین و برنامه LINK بسته شد فایل اجرایی شما ساخته شده ( مثلا در این مثال در درایو c و با نام example.exe ) و می توانید آن را اجرا کنید و خروجی های برنامه خود را ببینید.
روش دوم - استفاده از emulator
همون طوری که دیدید در روش قبل باید کارهای زیادی انجام می شد تا در نهایت یک فایل اجرایی ساخته بشه اما استفاده از emulator دیگه نیازی به انجام این مراحل نیست . فقط کافیه شما یک برنامه emulator گیر بیارید و کدهای برنامه تون رو اونجا بنویسید و در نهایت روی گزینه Compile کلیک کنید.به همین سادگی برنامه شما run میشه و دیگه نیازی به طی مراحل بالا نیست.در ادامه من لینک جدیدترین ورژن emulator 8086 گذاشتم تا همکلاسی ها استفاده کنند
دانلود emulator 8086 - حجم : 2.9 مگابایت
تا مطلب بعدی
التماس دعا
یا حق
|