بنام خدا
آدرس جدید پست براساس شماره ترتیبی :
https://vahidmy.blog.ir/post/15
عنوان پست :
اسمبلی ، اوپن سورس واقعی است :
بدون مقدمه می روم سر اصل مطلب:
بعد از اختراع سیستم عامل گنو/لینوکس و سایر سیستم عاملهای اوپن سورس و رایگان و آزاد ، مطالب بسیار غلط و نادرستی در اینترنت علیه زبان اسمبلی نوشته شد و هنوز هم نوشته می شود که ناشی از بیسوادی محض است .
بدون ترس و تعارف می گویم : کاربران لینوکس ، حتی از شنیدن لغت ِ اسمبلی ، متنفر و بیزار هستند و حالشان بد می شود زیرا اسمبلی را تنها یک ابزار برای کرک و دزدی نرم افزارهای ویندوز می دانند که این تصور کاملا غلط است و متاسفانه خیلی ها نیز کورکورانه و بدون تحقیق و آزمایش ، حرفهای کاربران لینوکس را در این مورد و موارد مشابه تکرار و تایید می کنند.
در پاسخ به این تصورات نادرست ، قاطعانه می گویم که :
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/sitemap.xml
بروزرسانی:
براثر حملات سایبری به وبلاگ وحیدمی ؛ تمام کامنت های کاربرها و پاسخ های من به کاربرها ؛ حذف شدند .
لعنت خدا و نفرین ملائکه بر هکرها و اتکرها و مجرمان سایبری .
تاریخ بروزرسانی
یکشنبه مورخ 29 مرداد 1402 خورشیدی
نکته :
آدرسهای آخرین پست وبلاگ وحیدمی را در زیر مشاهده می فرمایید .
در پناه خداوند متعال عظیم الشان باشید
ِ
الهم عجل لولیک الفرج .
امضای همیشگی اینجانب در جهت تایید صحت و درستی مطالب وبلاگهایم :
وحید محمدی . وبلاگ وحیدمی
https://vahidmy.blog.ir/archive
https://vahidmy.blog.ir/post/764