بسمه تعالی


Assembly is real open source.

 


اسمبلی به کتابخانه های زبانهای سطح بالا نیاز ندارد


 


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


 


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


 


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


 


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


 


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


 


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


 


در تمام موارد ، گرامر زبان اسمبلی از گرامر و سینتاکس تمام زبانهای سطح بالا ، ساده تر و تمیزتر و خالص تر و قابل فهم تر است .


 


اینکه سالهاست از دو زبان برنامه نویسی سی و سی پلاس پلاس یک غول بی شاخ و دم ساخته اند تماما نقشه ی کثیف دشمنان آزادی کاربر می باشد وگرنه زبانهای سی و سی پلاس پلاس در مقابل اسمبلی در حکم اسباب بازی کودکان می باشند .


 


با این وجود ، زبان اسمبلی از هردوی سی و سی پلاس پلاس ساده تر و تمیزتر و خواناتر و قابل فهم تر است .


 


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


زبان اسمبلی مادر تمام زبانهای برنامه نویسی اتوماتیک می باشد و دومین زبان قدرتمند جهان بعد از زبان ماشین است .


 


توجه داشته باشید که زبان برنامه نویسی ماشین قدرتمندترین و کاملترین و بهترین زبان برنامه نویسی جهان است و هیچ رقیبی ندارد زیرا زبان ماشین مادر تمام زبانهای برنامه نویسی جهان می باشد و تمام زبانهای برنامه نویسی نهایتا به زبان ماشین تبدیل می شوند .


( گذر پوست به دباغ خانه می افتد !! )


 


زبان ماشین ، قبرستان تمام زبانهای برنامه نویسی سطح بالا و سطح پایین است . لذا در اوج قدرت است .


 


بگذریم ....


 


تمام عملوندها و عملگرهای تمام زبانهای سطح بالا و تمام گرامر و سینتاکس و فناوریهای این زبانها ، ذاتا از قدیم ( اوایل دهه ی 50 میلادی ) در زبان اسمبلی بوده است .


گول جنگولک بازی زبانهای سطح بالا را نخورید .


 


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


 


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


 


 


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


 


ما هیچ نیازی به توابع زبانهای سطح بالا نداریم و می توانیم کماکان از همان توابع سیستم عامل ویندوز یا وقفه های بایوس استفاده نماییم . یا حتی خودمان با کمک زبان اسمبلی می توانیم ، توابع جدید بسازیم !


 


اگر بحث انواع داده باشد که اسمبلی ساده ترین و خالصترین و تمیزترین سیستم انواع داده را به شما هدیه می دهد .


 


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


 


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


مثلا در دلفی 6 شاهد بودم که عملوند + یا - یا * ، در چندین مورد مختلف بکار می رفت و عملا کاربر را گیج و سردرگم می کند .


 


در حالیکه اینها اضافی و غیرضروری هستند .


 




یا مثلا در همین دلفی برای نمایش یک پیام ، دهها تابع مسخره را بکار می بردند در حالیکه در اسمبلی کافیست از تابع MessageBox استفاده کنید . به همین سادگی و راحتی .




 


 


بسیاری از عملوندهای زبانهای سی و سی پلاس پلاس را نمی توان به همین راحتی تایپ کرد . مثل عملوندهایی که ترکیبی از = و + می باشند !


 


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


 



دنیس ریچی یک دست به سرو روی زبان اسمبلی کشید و نام زبان اش را سی (C) گذاشت و در کتاب معروف اش با عنوان (The C programming language ) ، مدعی شد که زبان سی یک زبان برنامه نویسی سطح پایین ( !!!) و سیستمی و همه منظوره (!!!!) و کامل می باشد !!!!!!




 


( همه می دانیم که ما فقط دو زبان سطح پایین داریم : 1- زبان ماشین 2- زبان اسمبلی . مابقی زبانها همگی سطح بالا هستند . در ضمن زبان سی هرگز یک زبان همه منظوره نیست و ناقص است و مشکلات خاص خودش را دارد و از همان ابتدا یعنی سال 1972 میلادی که توسط ریچی اختراع شد نیز بسیاری از قابلیتهای زبان اسمبلی را نداشت و محدودیتهای عمدی را بر کاربر تحمیل می کرد و قادر نبود مستقیما با سخت افزار ارتباط برقرار کند چون یک زبان سطح بالا بود . )


 


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


 


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


 


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



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


 



در زبان سی شما قادر به مهندسی معکوس نیستید و بسیاری از دستورات مفید زبان اسمبلی را نمی توانید تحت هیچ شرایطی در زبان سی بکار ببرید مثل دستور HLT .




 


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


 


همه ی زبانهای سطح بالا خصوصا زبانهای سی و سی پلاس پلاس زبانهایی مکار و حیله گر و محدود کننده و دشمن آزادی کاربر می باشند زیرا دست او را از سخت افزار و کرنل سیستم عامل کوتاه می کنند


 



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




 


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


 


کاربر حق دارد باینری سیستم عامل را زیر و رو کرده و دل و روده ی سیستم عامل را بیرون بکشد درمان کند و بعد سرجایش قرار دهد .


 


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


 


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


 


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


 


تمام این حقوق توسط زبانهای سطح بالا پایمال شده اند .


 



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




 


این زبانها باعث می شوند که ما از اصل برنامه نویسی یعنی تولید نرم افزار غافل شویم و همیشه مجبور باشیم هزاران فایل کتابخانه را از این جا به اون جا جابجا کنیم !!


 



یعنی مدام باید نگران باشیم که مبادا فلان فایل کتابخانه ای با هر نوع پسوند اعم از dll یا ocx یا lib یا h یا hpp یا inc یا C یا CPP یا Pas یا .... در این اسباب کشیها گم نشود که البته گم می شود و ما همیشه در هنگام نصب یا اجرای تمامی نرم افزارهای تولید شده توسط زبانهای سطح بالا یا حتی اجرای خود زبانهای سطح بالا با پیامهای آزاردهنده مبنی بر پیدا نشدن فلان فایل dll مواجه هستیم !




 



بدترین شکل این فاجعه در مورد اجرای بازیهایی است که توسط فناوری دایرکت ایکس (DirectX)ساخته شده اند و بدبختانه هر بازی با نسخه ی خاصی از دایرکت ایکس و هر نسخه از ویندوز نیز با نسخه ی خاصی از دایرکت ایکس سازگاری دارد . لذا این فرایند جهنمی واقعا کاربر را عصبانی و کلافه می کند .




 



همین نصب و اجرای بازی میدتاون مدنس (midtown madness ) با هزار بدبختی انجام شد و هزاران فایل مربوط به نسخه های مختلف دایرکت ایکس را دانلود و نصب کردم تا توانستم تحت ویندوز 10 بازی میدتاون مدنس را اجرا نمایم .




 


نصب بازی فیفا 99 نیز با دشواری انجام شد و البته منوهای این بازی متاسفانه به زبان انگلیسی نیستند لذا کارکردن با فیفا 99 تحت ویندوز 10 با دشواریهایی همراه است . فیفا 99 تحت ویندوز 10 اجرا می شود و خیلی سریع هم اجرا می شود اما بسته ی زبان انگلیسی را ندارد لذا بازی کردن در ان دشوار است .


 


زبان دلفی 6 که گیرم نیامد . بجایش دلفی 7 را دانلود و روی ویندوز 10 نصب کردم . اجرا شد اما پیام احمقانه ای داد که اجازه نمی داد هیچ نرم افزاری بسازم .


لذا دلفی 7 را بطور کامل از روی هارد رایانه حذف کردم .


 


ویژوال استودیو 98 تحت عنوان ویژوال استودیو 6 را روی ویندوز 10 نتوانستم نصب کنم .


 


متاسفانه ویندوز 10 یک جاسوس افزار کثیف است که مانع از اجرای نرم افزارها و بازیهای قدیمی می شود .


 


لعنت به دات نت و مایکروسافت خبیث .


 


اینها نتیجه ی دشمنی با زبان اسمبلی و دوستی با زبانهای سطح بالا و برنامه نویسی ماژولار می باشد .


 


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


 


 



همیشه شاهد عدم اجرای فلان نرم افزار بدلیل یافت نشدن فلان فایل dll هستیم .




 


اینها ارمغان زبانهای سطح بالا و کتابخانه های چرت و احمقانه شان می باشد .


 


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


 


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


 


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


 


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


 


لینوکس بجز احضار ارواح خبیث یونیکس کار دیگری انجام نداده است .


 


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


 


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


 


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


 


 


به هرحال ، ویندوز باید از شر این فایلهای وابستگی و کتابخانه ای خلاص شود و بطور کامل با زبان اسمبلی بازنویسی شود


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


 


همه ی این فجایع فقط یک دلیل دارد : دور شدن از زبانهای واقعی برنامه نویسی یعنی زبانهای ماشین و اسمبلی .


 


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


 


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


 



mips


motorola


powerPC


Alpha dec




 


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


 


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


 




تمرکز بر روی فقط یک پردازنده که معروف و قدرتمند و سریع و کاربردی و تجاری و ارزان قیمت باشد و مستندات فراوان داشته باشد و مشتریان فراوان در سطح جهان داشته باشد کاری عاقلانه است که مایکروسافت این کار عاقلانه را از اواسط دهه ی 90 میلادی تا به امروز انجام داده است به همین دلیل است که امروز ویندوز 10 نهایتا روی سه پردازنده ی زیر اجرا می شود که در مدل 64 بیتی ، زبان اسمبلی کمابیش یکسان و مشابه دارند :




 



intel


AMD


Arm


 



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


 


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


 


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


 


مایکروسافت جایی سرمایه گذاری می کند که مشتری  دست  به  نقد در انجا حضور داشته باشد و هرگز بر روی فناوریهای مرده و منسوخ یا نایاب سرمایه گذاری نمی کند .


 


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


مایکروسافت به دنبال جذب حداکثری می باشد و بهترین بازارها را زیر نظر می گیرد و جایی سرمایه گذاری می کند که میلیاردها مشتری و کاربر و توسعه دهنده حضور داشته باشند .


 


لذا عمدا از پورت کردن ویندوز روی صدها پردازنده ی منسوخ و قدیمی دهه های 60 و 70 میلادی خودداری می کند و فقط روی پردازنده هایی که بیشترین تعداد مشتری و توسعه دهنده و مستندات آموزشی دارد سرمایه گذاری می نماید و ویندوز را منحصرا روی همین تعداد اندک پردازنده پورت می نماید .


 


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


مایکروسافت کارایی را بر قابلیت حمل ترجیح می دهد دقیقا برخلاف فلسفه ی یونیکس .


 


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


 


فلسفه ی یونیکس دیر یا زود طرد می شود و می میرد


 


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


 


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


 


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


 


رمز موفقیت ویندوز در دنیای پرمخاطب دسکتاپ در یک چیز است :


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


 


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


 


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


 


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


 


بنابراین ، قابلیت حمل زبانهای سطح بالا عملا دیگه کارایی خودش را از دست داده است و ما اصلا به زبانهای سطح بالا و قابل حمل ، نیاز نداریم



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


 


بسیاری از این کتابخانه ها کاملا زائد و پردردسر هستند . مثل دایرکت ایکس و دات نت و صدها کتابخانه و فریم ورک مازوخیستی و اضافی و پرهزینه .


 


زبان اسمبلی ذاتا خودش کاملترین و غنی ترین زبان برنامه نویسی دنیا می باشد و هیچ نیازی به کتابخانه های زبانهای سطح بالا ندارد .


 


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


 


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


 


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


 




مثلا به این قطعه کد اسمبلی که می توان در ویندوز و توسط فلت اسمبلر (Fasm) اجرا کرد توجه کنید :




 



format pe gui


 


include 'win.inc'






xor eax , eax


xor edx , edx


mov eax , form1


cmp form1 , 0


je exit


cmp form1 , functions


je functios


 


functions:


push eax


mov eax , function1


mov eax , function2


mov eax , function 3


.....


.....


....


cmp eax , function1


je CreateWindow


cmp eax ,function2


je ShowWindow


cmp eax , function3


je ExitWindow


 


CreateWindow:


mov function1 , Window


 


ShowWindow:


mov function2 , Show


 


ExitWindow:


mov function3 , exit


 


exit:


xor eax , eax


ret


 




برنامه ی فوق تحت ویندوز اجرا می شود بدون اینکه حتی یک تابع API ویندوز یا یک تابع زبانهای سطح بالا را بکار ببریم .




 



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




 


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


 


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


 



آیا شما در این کد اسمبلی که بصورت فی البداهه در بالا نوشتم هیچ اثری از توابع API ویندوز یا توابع یا کتابخانه های زبانهای سطح بالا مشاهده می کنید ؟؟؟؟




 


مسلما خیر . اینست کدنویسی خالص و اصیل و استاندارد .


 



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




 


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


 



حالا برای اجرای واقعی باید نهایتا این برنامه را مستقیما به کرنل ویندوز یعنی فایل ntdll.dll وصل نماییم که اینجا فلت اسمبلر از دستور FF15 استفاده می نماید تا این برنامه بتواند مستقیما کرنل سیستم عامل ویندوز را فراخوانی کرده و اجرا شود .




 


به این می گویند استراتژی کد . یعنی اینکه برای بهینه سازی کد برنامه مان از یک استراتژی استفاده نماییم تا کمترین وابستگی را به ویندوز داشته باشیم و آزاد و رها باشیم .


 


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


 


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


 


 


بله با چنین برنامه های ساده عملا بدون نیاز به توابع سیستم عامل و توابع زبانهای سطح بالا می توان در زبان اسمبلی از دستورات خام و اصیل زبان اسمبلی نرم افزارهای اصیل و خالص و مستقل را تحت هر سیستم عامل اجرا کرد .


 


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


 


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


 


این یعنی اینکه اسمبلی شامل این ضرب المثل است که می گوید :


 


طلا که پاک است چه حاجت اش به خاک است


 


و یا این ضرب المثل


 


هرکه نان از عمل خویش خورد منت حاتم طایی نبرد


 


 



یکی از سیستم عاملهایی که بطور کامل و صد درصدی با زبان اسمبلی ساخته شده است و حتی یک تابع زبانهای سطح بالا را بکار نبرده است سیستم عامل دکس او اس (DexOS) می باشد .




 


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


 


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


از نصب این سیستم عامل روی کامپیوتر اصلی تان جدا خودداری نمایید .


 


 


اما من قصد ندارم که سیستم عاملهایی از تبار دکس او اس را ترویج دهم بلکه قصد دارم تحت همین ویندوز روش برنامه نویسی با زبانهای ماشین و اسمبلی را اموزش دهم .


 


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


 


 


من به ابتدای بحث برمی گردم و میگویم زبان اسمبلی هیچ نیازی به کتابخانه های زبانهای سطح بالا ندارد و می توانید این کتابخانه ها را حذف کنید و منحصرا با کدهای خام اسمبلی ، نرم افزار بسازید .


 


 


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


 


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


 


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



توجه کنید که من منحصرا از توابع API ویندوز برای برنامه نویسی استفاده خواهم کرد و هرگز به سمت توابع و کتابخانه های زبانهای سطح بالا نخواهم رفت .




 


 



برای من همین توابع API ویندوز کلاسیک (Win32API) ، کاملا کفایت می کند .


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




 



بهرحال میلیونها نرم افزار و بازی و درایور ویندوز هنوز که هنوزه از توابع win32 استفاده می نمایند . پس فعلا کاری به ویندوز 64 بیتی نداریم .




 



در آینده اگر عمری باشد برنامه نویسی Win64 تحت اسمبلی را نیز اموزش خواهم داد انشاء ا...




 


نکته ی مهم :


 


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


بقول معروف ، آسیاب به نوبت !


 


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


 


نهایتا من زبان اسمبلی را نیز می بوسم و کنار می گذارم و منحصرا با کدهای زبان ماشین و البته با کمک هگز ادیتور ، تحت ویندوز برنامه نویسی خواهم کرد و به شما نیز یاد می دهم . انشاءا...


 


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


 


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


 


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



Masm32


Fasm


RosAsm


 



سایر کامپایلرهای زبان اسمبلی عملا کارایی لازم را ندارند و به درد نمی خورند .


من با هرسه کامپایلر فوق تحت ویندوز برنامه نوشته ام و تا حدودی بر انها تسلط دارم . لذا در مباحث برنامه نویسی با زبانهای ماشین و اسمبلی منحصرا از این سه کامپایلر استفاده می نمایم .


 


 


برای برنامه نویسی محض با زبان ماشین و البته برای برنامه نویسی با هگز ادیتور ، من این سه هگز ادیتور قدرتمند را بکار می برم و پیشنهاد می دهم :


:


 




Hexplorer


 


Tiny Hexer






C32asm



 




البته Winhex و Hackman نیز بسیار خوب و عالی و قدرتمند می باشند و شما می توانید از این دو نیز به میل خودتان استفاده نمایید .




 


 


درواقع از هر هگز ادیتور دلخواه می توانید برای برنامه نویسی با هگز ادیتور استفاده نمایید . بستگی به تمایل و نیاز خودتان دارد


 


البته باید از دیباگرها و دیس اسمبلرهای قدرتمند نیز استفاده نمایید . مثل این موارد :


 



OllyDBG


 


Borg DisAssembler


 


w32dasm


 



C32Asm




 



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




 



البته برنامه ی wHexEditor که هم نسخه ی ویندوزی دارد و هم نسخه ی لینوکس و هم نسخه ی مک ، تا حدودی برخی قابلیتهای C2asm را در خود دارد ولی هرگز به گرد پای C32asm نمی رسد .




 


چینی ها را هرگز دستکم نگیرید . خدای برنامه نویسی و هک و کرک می باشند !


 


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


 


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


عملا باید به عقل اروپایی ها و امریکاییها شک کرد .


 


شاید در فرصتی دیگه تمام ابزارهای هک و کرک و مهندسی معکوس را در وبلاگ ام آپلود نمایم !


 



همینجا بگویم که ابزار معروف IDA pro disassembler با اون دیکامپایلر چرت و مسخره و انحصاری اش نه فقط هیچ کمکی به مهندسی معکوس نمی کند بلکه دشمن ذاتی زبانهای ماشین و اسمبلی است و عملا مانع فهم زبان اسمبلی می شود و شما را مجددا به سمت زبانهای سطح بالا سوق می دهد .




 



برنامه ی Ida pro و هرنوع دیکامپایلر دیگه ، همگی شما را از زبانهای ماشین و اسمبلی دور می کنند و مجددا به دام زبانهای سطح بالا می اندازند .




 


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


 



لذا من همان OLLYDBG و C32Asm را به شما پیشنهاد می دهم .




 


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


 


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


 


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


 


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


 


چه نیازی به سورس سطح بالا دارید ؟؟؟


 


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


 


 



خب وقتیکه من تفاوت بین FF15 و E8 را که هردو به معنای Call می باشند می دانم و درک می کنم ، چه نیازی به اوپن سورس و دیکامپایلر دارم ؟؟




 


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


 



FF15 ، توابع بیرونی موجود در فایلهای dll نرم افزار یا سیستم عامل ویندوز و کرنل ویندوز را احضار می کند در حالیکه E8 ، توابع و روتینهای درون خود برنامه را فراخوانی و احضار می کند .




 


البته هرکدام از این دو کد زبان ماشین، مزایا و معایب خاص خود را دارند که در بحث های بعدی به آن می پردازم . انشاء ا...


 


+


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


 


+


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

+

وحید محمدی - وبلاگ وحیدمی