به نام خدا

آموزش برنامه نویسی با هگز ادیتور بخش 2



کاربران گرامی . سلام . به بخش دوم از  دوره آموزش برنامه نویسی با هگز ادیتور ، خوش آمدید . 

در مجموعه ی تدریس برنامه نویسی با هگز ادیتور ، سعی بر این است که شما کاربران گرامی را با تمام جزئیات و نکات مخفی و مرموز سیستم عامل ویندوز آشنا کنم  تا بعدا خودتان بتوانید شخصا از روی ویندوز ، یک سیستم عامل رایگان و آزاد و اوپن سورس که البته سورس کدش به زبان اسمبلی باشد ، برای خودتان یا برای دوستان تان یا برای مشتریان یا دولت بسازید . 


البته شما مجبور نیستید چنین چیزی را رایگان کنید و می توانید بابت آن از مشتریان پول دریافت کنید . ضمنا ارائه ی سورس کد چنین سیستم عاملی اصلا و ابدا اجباری نیست و شما در ارائه یا عدم ارائه ی سورس کد  ، کاملا آزاد و مختار هستید . 


+


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


خب طبق نوشته های پست قبلی تحت عنوان آموزش برنامه نویسی با هگز ادیتور بخش 1  ،  برنامه ی قدرتمند  C32asm را اجرا کنید . ( من امیدوارم که توانسته باشید این برنامه را از پست قبلی دانلود کرده باشید . ) من فرض را بر این می گیرم که شما این برنامه را از پست قبلی و به روشی که گفتم ( مراجعه به نقشه ی وبلاگ وحیدمی )  دانلود و اجرا کرده اید . 



خب حالا بر اساس این فرض ، کارم را شروع می کنم . 


در پست قبلی گفتم که در آدرس 00000000  که یک عدد هگزادسیمال می باشد و در ستون وسط هگز ادیتور برنامه ی c32asm  کد 4D5A را بنویسید   و نتیجه را ذخیره نمایید . 


از منوی File  گزینه ی Save  یا  Save as  را انتخاب کنید و هرکاری که انجام می دهید را Save  ( ذخیره ) کنید  تا کارهایتان ذخیره شود و زحمات تان بر باد نرود . 


یک نام دلخواه برای فایل مورد نظرتان انتخاب کنید و برای او ، پسوند exe را نیز با دست بنویسید زیرا قرار است یک نرم افزار ویندوزی را با زبان ماشین بسازیم که روی تمام نسخه های ویندوز یعنی از ویندوز 95 تا ویندوز 10  براحتی اجرا شود و قابل حمل باشد . 

این نرم افزار روی ویندوز سرور 2022 نیز براحتی اجرا می شود . 


درمورد عبارت MZ باید بگویم که این مخفف نام آقای مارک زبیکوسکی می باشد که معمار اصلی سیستم عامل داس بود . 



M = مارک

Z = زبیکوسکی 


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


خب ، حالا به ستون وسط هگز ادیتور برمی گردیم و کد هگز 8000  را با دست تایپ می کنیم . همینجا لازمست بگویم که این کد و کد قبلی یعنی 4D5A به همراه تعدادی از کدهای بعدی ، روی هم ساختار داس را تشکیل می دهند . برای آشنایی دقیق با ساختارهای تشکیل دهنده ی نرم افزارها و درایورهای ویندوز لازمست به پست جنجالی  pe.txt در وبلاگ وحیدمی ، مراجعه فرمایید . 


https://vahidmy.blog.ir/post/pe-txt


نکته : اگر با کمک هگز ادیتور ، چندین نرم افزار مختلف ویندوزی را باز کنید متوجه می شوید که در برخی از نرم افزارها یا درایورها ، بجای عدد 8000  از اعدادی همچون 5000 یا 9000 استفاده شده است .  دقیقا معلوم نیست که این عدد چه کاربردی دارد ولی من حدس می زنم به تعداد بایتهایی مربوط می شود که در بخش پایانی فایل اجرایی ( نرم افزار یا درایور ) باید نوشته شوند که اصطلاحا به اینکار  پدینگ  padding گفته می شود ! من خودم شخصا با پدینگ و نوشتن هزاران کد هگز 00   مخالف هستم زیرا اینها حفره های امنیتی ویندوز محسوب می شوند و باعث می شوند که ویندوز براحتی آب خوردن هک و ویروسی و آلوده شود . 

لذا به دنبال راهی هستم که این کدهای هگز 00 اضافی و خصوصا این پدینگ لعنتی را حذف کنم !! 


کد 8000  باید در آدرس  00000002 نوشته شود . توجه کنید که این آدرس براساس کدهای هگزادسیمال تعیین می گردد .  از عدد 0 تا 9  هیچ فرقی بین کدهای دسیمال و هگزادسیمال وجود ندارد  اما از عدد 10 دسیمال به بعد ، قضیه فرق می کند . 


خب حالا در آدرس  0000004  عدد  0100 را با دست و در ستون وسط هگز ادیتور تایپ کنید و نتیجه را ذخیره کنید . در این حال برنامه ی c32asm پیامی مبنی بر ایجاد فایل پشتیبان صادر می کند . روی دکمه ی ok کلیک کنید تا یک نسخه ی پشتیبان ( بک آپ ) از فایل اصلی گرفته شود تا اگر فایل اصلی خراب شد بتوانیم از نسخه های پشتیبان استفاده کنیم . 


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


کد 0100 احتمالا به معنای تعداد صفحات در فایل ، می باشد . زیرا فایلهای ویندوز ، هم در روی دیسک و هم در حافظه ی رم ، صفحه بندی می شوند . البته به شکلی متفاوت !! 


این عدد که معکوس عدد 0001 می باشد به معنای 1 می باشد یعنی یک صفحه . 


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

در مورد این عادت پردازنده ی اینتل ، هیچ فرقی بین داس و ویندوز و لینوکس و .... نیست . 


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


تاکید می کنم : در ستون وسط هگز ادیتور باید همه ی پارامترها را بصورت معکوس و با دست بنویسید و ذخیره کنید زیرا پردازنده ی اینتل همه چیز را بصورت معکوس می خواند و اجرا می کند و می نویسد ! 


در حالیکه پردازنده ی موتورولا همه چیز را بصورت مستقیم می خواند و می نوشت لذا موتورولا سریعتر از اینتل بود و کارایی بیشتری داشت . البته الان سالهاست که پردازنده ی موتورولا منسوخ و منقرض شده و به تاریخ پیوسته است . 


ادامه ی درس :


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


در آدرس  0000008  کد  0004 را در ستون وسط هگز ادیتور تایپ کرده  و نتیجه را ذخیره نمایید  . 


در آدرس  0000000A کد  1000  را در ستون وسط هگز ادیتور  بنویسید و نتیجه را ذخیره کنید . 


در آدرس 000000C  کد هگز  FFFF را در ستون وسط هگز ادیتور بنویسید و نتیجه را ذخیره نمایید . 


فعلا به ستون راست هگز ادیتور ، کاری نداریم . اما به زودی باید به ستون راست هگز ادیتور نیز توجه کنیم تا یکسری چیزهای جالب را کشف کنیم !! 


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


ستون چپ هگز ادیتور نیز به ادرس ها مربوط می شود . 


در نوار وضعیت که در پایین برنامه قرار دارد به عبارت Cursor   نگاه کنید . عددی که در سمت راست این عبارت دیده می شود همان آدرس مورد نیازمان می باشد . 


پس مطابق با این عدد که در نوار وضعیت پایین برنامه ی c32asm و در سمت راست عبارت  Cursor  نوشته شده است رفتار کنید   من خودم با کلیک کردن روی کدهای موجود در ستون وسط ،  و نگاه کردن به عدد کنار این عبارت، متوجه می شوم که الان دقیقا در کدام آدرس قرار دارم . 


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


در دنیای هگز ادیتور ، همه چیز براساس آدرس یا آفست یا آدرس رابطه ای و نسبی و تقریبی ،  تعیین می شود . 


پایان بخش دوم دوره 



بخش سوم را در پست بعدی خواهم نوشت . انشاا...