بنام خدا  



اسمبلی ، اوپن سورس واقعی است :



بدون مقدمه می روم سر اصل مطلب:


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


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


در پاسخ به این تصورات نادرست ،   قاطعانه می گویم که :


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


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



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


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



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


 مثال :


سورس برنامه ای که با زبان اسمبلی  نوشته شده  است:


xor   eax  ,  eax 


ret


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



حالا شما با یک دیس اسمبلر  دلخواه  مثلا  ollydbg    نرم افزاری که از کامپایل سورس بالا ایجاد شده است را  دیس اسمبل کنید  :


نتیجه ی دیس اسمبلی بدین شکل است :


xor  eax , eax


ret


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


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


push  0


call    ExitProcess



حالا این برنامه را  کامپایل کنید و بعد با  یک دیس اسمبلر دلخواه مثلا همان  ollydbg   آنرا  دیس اسمبل کنید . چه می بینید ؟؟؟


چیزی شبیه به این را قطعا خواهید دید :


push  0


call    KERNEL32.ExitProcess



مثال بعدی :


برنامه ی  معروف سلام دنیا  در  اسمبلر  روسسم (RosAsm) :



push    &MB_OK

push     caption

push    text

push    0 

call     ' USER32.MessageBoxA'


push  0


call    'KERNEL32.ExitProcess'


[caption:  B$  ' hello  world '  , 0  

text:  B$   ' Win32 Assembly programming by  RosAsm is  easy',0 ]




خب حالا در محیط  RosAsm  کلید  F6  را فشار دهید  تا برنامه ی شما  کامپایل و بیلد  و ران شود .


برنامه را ببندید .


حالا  بازهم به سراغ  نرم افزار  معروف  ollydbg   بروید  و این برنامه را  دیس اسمبل کنید :


چه می بینید ؟؟؟


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



حالا متوجه شدید که   چرا می گویم  اوپن سورس واقعی  ، همان زبان اسمبلی است ؟؟؟؟


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


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


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



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



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


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


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


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


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



push  ebp


mov  ebp  ,  esp


……

……


mov  esp ,  ebp


pop  ebp


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


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


دستورات بالا درواقع معادل با تابع  main در زبان   C  محسوب می باشند:


int main()   {


 ........

.........


 return 0;


}




آیا این سورس که شما انرا تنها در دیس اسمبلی دیده اید   ثابت نمی کند که   این  دستور  درواقع   بدنه ی اصلی  روال یا روتین  است ؟؟؟



یک سوال دیگر می پرسم :


از شباهت فراوان بین  زبانهای اسمبلی و سی  چه نتیجه ای می توانید بگیرید ؟؟؟؟؟؟؟؟


مثال:



int    a  =   5            ;  C


mov   a  ,  5          ;   Assembly 


خب  حالا  چی می گید ؟؟؟


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



بروید   روح   دکتر   دنیس  ریچی  خالق  زبان  سی  را  احضار کنید  تا به شما بگوید  که چرا  اینقدر بین سی و اسمبلی شباهت وجود دارد ولی   سی  زبانی مقدس  و اسمبلی زبانی  نحس  تصور می شود ؟؟؟؟؟


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



قابلیت حمل روی معماریهای مختلف ؟؟؟؟؟؟؟!!!!



شاید و شاید هم نه !!!


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



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


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



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



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


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




Assembly  :


cmp      source  ,    disassembly

je         real-open-source


ret



real-open-source:


mov  Assembly , Real-OpenSource&Freedom


ret





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


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


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


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



اسمبلی ،  اوپن سورس واقعی است .



والسلام



+



+





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


https://vahidmy.blog.ir


https://vahidmy.blog.ir/sitemap.xml