مزایای فسم نسبت به سایر اسمبلرها
به نام خدا
مزایای فسم نسبت به سایر اسمبلرها
در برنامه نویسی با فسم (فلت اسمبلر) ، با چیزهای اضافی مثل lib یا def یا سایر چیزهایی که معمولا در masm و سایر کامپایلرهای زبان اسمبلی دیده می شوند ، روبرو نمی شویم
زیرا سیستم فسم ، بسیار ساده است و از این فایلها ساخته شده است :
بعنوان مثال :
fasm.asm
fasm.inc
همین دو فایل ، برای تولید یک نسخه ی جدید از فسم ، کافی هستند !!
در فسم ، از فایل پروژه با اسامی و پسوندهای عجیب و غریب ، خبری نیست و سیستم ، بسیار ساده و خوانا و تمیز و قابل فهم است .
محیط کارمان اصلا شلوغ نمی شود . یعنی مجبور نیستیم به سبک زبانهای سطح بالا ، صدها فایل سورس و کتابخانه و ... را بسازیم تا شاید بتوانیم نرم افزار بسازیم !!
فسم همانند RosAsm ، از مدل برنامه نویسی مونوفایلینگ پیروی می کند .
یعنی در فسم نیز می توانیم تمام اجزای تشکیل دهنده ی نرم افزار را در یک فایل ، بنویسیم و فایل را کامپایل کنیم و نرم افزار را بسازیم .
این باعث می شود که جابجایی و قابلیت حمل فسم ، بسیار آسان باشد .
من خودم به سبک شبه هکس ادیتور ، در فسم برنامه می نویسم .
یعنی مطابق با معماری نرم افزار ، آن نرم افزار را با دست و در محیط فسم ، می سازم !
یعنی نوعی برنامه نویسی نیمه اتوماتیک !
البته برای انجام اینکار ، شما باید از قبل ، با هکس ادیتور برنامه نوشته باشید و با معماری سیستم عامل ، آشنا باشید
اما درعوض ، از حمل و جابجایی مداوم صدها فایل کتابخانه و هدر ، نجات پیدا می کنید !
در فسم می توانید کل معماری نرم افزار را بصورت بایت به بایت و دقیقا شبیه به مدل برنامه نویسی با زبان ماشین ، و مطابق با معماری نرم افزار و معماری سیستم عامل ، با دست بنویسید و سپس کلید F9 را فشار دهید تا نرم افزار تولید و اجرا شود !
اما اگر اینکار برایتان دشوار باشد ، آنگاه می توانید از ماکروها و کتابخانه های فسم برای تولید نرم افزار استفاده کنید
اگر از ماکرو استفاده کنید ، گرامر برنامه تان در محیط فسم ، بسیار شبیه به گرامر زبانهای سطح بالا خواهد شد و کدتان از خوانایی بسیار بالایی برخوردار خواهد گردید .
من معتقدم که اسمبلرهایی که با کمک زبانهای سطح بالا ساخته شده و تحت تاثیر آنها قرار گرفته اند ، اصلا به درد برنامه نویسی نمی خورند و دیر یا زود ، شما را از زبان اسمبلی متنفر کرده و به سمت زبانهای سطح بالا متمایل می نمایند!
متاسفانه اسمبلرهایی مثل masm و nasm و tasm ، این مشکل را در خود دارند
سوال :
اما در انجمن masm چیزهایی را کشف می کنیم که در انجمن سایر اسمبلرها هرگز ندیده ایم . آیا فسم واقعا بهترین کامپایلر زبان اسمبلی است ؟؟
جواب :
آن چیزهایی که کشف می کنید اصلا ربطی به زبان اسمبلی ندارن و اضافی هستند و طبیعی است که شما خیال کنید بعنوان مثال ، masm بهتر از fasm است !!!
مثل فایلهای اکو که برای سیستم عامل داس و یا برای برنامه ی خط فرمان سیستم عامل ویندوز ، ساخته شده اند و هیچ ربطی به زبان اسمبلی ندارند اما در masm دیده می شوند !!
این فایلها نوعی اسکریپت نویسی را رایج کرده اند . این با برنامه نویسی فرق دارد !
فایلهایی با پسوندهای cmd یا bat ، به درد زبانهای سطح بالا و ویندوز می خورند و هیچ ارتباطی با زبان اسمبلی ندارند
اینها مزیت محسوب نمی شوند . اینها اضافی هستند و باید از زبان اسمبلی ، زدوده و حذف شوند
در اسمبلر masm خیلی چیزهای دیگه را نیز می بینید که ظاهرا در fasm نمی بینید اما اینها هرگز قدرت برنامه نویسی تان را افزایش نمی دهند بلکه شما را فریب داده و به سمت زبانهای سطح بالا و شرکت مایکروسافت ، متمایل می کنند .
نتیجه :
سرانجام خسته می شوید و به همان زبانهای سطح بالا برمی گردید !
زبان اسمبلی حتی از یک واژه پرداز ساده مثل نات پد نیز برای تولید نرم افزار استفاده می کند .
هیچ نیازی به این فایلهای اضافی نیست
اینها همگی میراث مایکروسافت و زبانهای سطح بالا هستند که به درون بدنه ی زبان اسمبلی ، رخنه و نفوذ کرده اند .
زبان اسمبلی واقعی ، یک زبان بسیار ساده و خالص و تمیز و خوانا و کوچک است .
زبان اسمبلی هزاران مرتبه ساده تر و کوچکتر از زبان C می باشد و حتی به کتابخانه های این زبان سطح بالا نیز هیچ نیازی ندارد
اما چه می شود کرد که زبان C ، تمام دنیا را فریب داده است ؟؟!!
تعداد دستورات زبان اسمبلی که باید یاد بگیرید ، نهایتا 21 دستورالعمل است .
هیچ نیازی نیست هزاران دستور زبان اسمبلی اینتل را از حفظ شوید !!
در بسیاری از موارد ، زبان اسمبلی بسیار ساده تر و خالص تر و کوچکتر و البته قدرتمندتر و هوشمندتر و انعطاف پذیرتر از زبانهای C و ++С ، می باشد .
منظورم از زبان اسمبلی در این پست ، Fasm می باشد .
زیرا اگرچه RosAsm نیز همین مزایا را دارد اما به دلیل اینکه منسوخ شده است و هیچ کاربر فعال یا وبسایت یا انجمن ندارد و قابل حمل نیست و برخی مشکلات خاص خودش را دارد ، بنابراین در تمام این پستهای اخیر ، منظورم از زبان اسمبلی ، Fasm می باشد .
سوال :
آیا بهتر نیست بجای زبان اسمبلی از یک he editor قدرتمند مثل WinHex استفاده کرد و از این همه تردید بین زبانهای مختلف و این تضادها و تناقض ها و این پیچیدگی در سیستم ، خلاص شویم ؟؟؟
جواب :
بله بهتر است . خیلی هم بهتر است . اما برنامه نویسی با هکس ادیتور ، آنهم یک هکس ادیتور بسیار قدرتمند و عجیب و البته سخت افزاری که تغییرات را مستقیم در سکتورهای هارد دیسک می نویسد و می تواند کل هارد دیسک را به فنا بدهد ، اصلا کار عاقلانه ای نیست .
بهتر است که از زبان اسمبلی که قدرت کمتری نسبت به زبان ماشین دارد و با سکتورها کاری ندارد و خطری برای هارد دیسک ایجاد نمی کند استفاده کنیم
ضمن اینکه پیاده سازی فرمولهای ریاضی و نوشتن الگوریتم بر روی زبان اسمبلی ، بسیار ساده تر و قابل فهم از زبان ماشین است
مثلا پیاده سازی چیزهایی مثل فاکتوریل یا برج های هانوی ، در زبان اسمبلی امکان پذیر است و قابل فهم است
اما همین چیزها را اگر بخواهیم با کدهای زبان ماشین انجام دهیم ، عملا سرگیجه می گیریم و حتی خودمان هم اشتباه می کنیم چه رسد به کاربر !!
با زبان ماشین نیز می توانیم تمام این کارها را انجام دهیم ، اما بسیار دشوار خواهد شد و خوانایی به شدت کاهش می یابد
لذا اسمبلی ، بعنوان یک زبان برنامه نویسی سطح میانی ، بهترین گزینه محسوب می شود .
مزیت دیگر فسم نسبت به سایر اسمبلرها در این است که روز به روز بر تعداد کاربرهایش افزوده می شود
مثلا کاربرهای خارجی توانسته اند با کمک فسم ، سیستم UEFI ویندوز یا لینوکس را پیاده سازی کنند
یا مثلا توانسته اند با فسم ، وب سرور لینوکس بسازند !
یعنی هرکاری که با زبانهایی همچون Rust (زبان راست ) ، انجام می شود را می توانیم در فسم (Fasm) نیز انجام دهیم
تمام پارادایم ها و سبک ها و مدلهای مختلف برنامه نویسی که در زبانهای سطح بالا از قبیل پایتون یا جاوا یا راست ، انجام می شوند را می توانیم در زبان اسمبلی یعنی فسم نیز پیاده سازی و اجرا کنیم !
اصولا هرچند وقت یکبار ، یک انسان که خودش را نابغه فرض کرده است ، بجای اینکه زبان اسمبلی را در سطح دنیا ترویج کند ، یک زبان سطح بالای جدید مثل همین زبان راست را اختراع می نماید !!
اینها همگی نشان از جمود فکری دارد !!
این افراد اگر عقل داشتند ، بجای اینکه با اختراع زبانهای جدید سطح بالا ، چرخ را از نو اختراع کنند ، دستی به سر و روی زبان اسمبلی می کشیدند و این زبان واقعی را در سطح دنیا ، مطرح می کردند .
اختراع زبان برنامه نویسی راست ، هرگز مشکلات ناشی از اختراع زبانهای برنامه نویسی قبلی را برطرف نمی کند
بلکه مشکلی بر مشکلات قبلی می افزاید . قوز بالای قوز !!
سوال :
تا حالا چند سیستم عامل را بطور کامل با زبان پایتون یا راست یا جاوا ساخته اند ؟؟؟
جواب :
هیچی !! دریغ از یک سیستم عامل !
زیرا اینها اسباب بازی هستند نه زبان برنامه نویسی
پایتون همچون بیسیک و فورث ، یک زبان تفسیری است .
زبان تفسیری و سطح بالا هرگز قادر به ساخت سیستم عامل نیست .
لذا هرگز نمی توانید با زبانهایی مثل فورث یا بیسیک یا پایتون یا راست ، سیستم عامل بسازید .
زبان برنامه نویسی واقعی باید بتواند یک تنه و به تنهایی یک سیستم عامل را بسازد .
اسمبلی از عهده ی این کار برآمده است و تاکنون دهها سیستم عامل کوچک و گمنام و مخفی اما بسیار سریع و قدرتمند و با محیط رابط گرافیکی کاربر را ساخته است
اینها سیستم عامل هایی هستند که بطور کامل با زبان اسمبلی نوشته شده اند :
kolibrios
fasmos
minos
dexos
tetros
سوال : اما اینها که یک مشت اسباب بازی هستند نه سیستم عامل ؟؟؟
جواب :
اینها در مقایسه با غولهای سنگین وزن از قبیل ویندوز و لینوکس و مک ، اسباب بازی هستند !!
اما لااقل ثابت کردند که زبان اسمبلی در ساخت سیستم عامل ، حرفهای زیادی برای گفتن دارد و می تواند علیه زبانهای معروف از قبیل C یا ++C رجز خوانی کند و نفس کش بطلبد !!!
اینها شاید اسباب بازی باشند اما برخلاف نظر جادی میر میرانی ، هرگز یک چیز دم دستی نیستند !!!
جادی میرمیرانی همچون سایر کاربرهای لینوکس ، در اظهار نظری که در مورد سیستم عامل kolibrios در انجمن فارسی اوبونتو کرده بود این را گفت :
این یک سیستم عامل سه مگابایتی است . این فقط یک چیز دم دستی است . در سه مگابایت که چیزی وجود ندارد !!!
نکته :
دم دستی یعنی پیش پا افتاده و یا بقول اهالی سینما ، مبتذل !!
گویا جناب جادی هنوز نمی داند که اولا این سیستم عامل ، سه مگابایت نیست بلکه فقط یک مگابایت است .
ثانیا در همین یک مگابایت ، با یک سیستم عامل مدرن و کامل گرافیکی و کاربرپسند ، و دهها نرم افزار کاربردی و سیستمی و حتی شبیه ساز و ماشین مجازی روبرو می شوید !!
این کجایش دم دستی و مبتذل و پیش پا افتاده و بی اهمیت است جناب جادی میر میرانی ؟؟؟!!!
تعریف شما از عبارت دم دستی چیست ؟؟؟!!
+
+
هرچیز اضافی که در سایر اسمبلرها می بینید ، واقعا اضافی هستند .
چه دلیلی دارد که من بیایم و برای فایل های کرنل ویندوز از قبیل فایلهای زیر ، به ازای هر فایل ، صدها فایل اضافی بسازیم ؟؟؟
فایلهای کرنل ویندوز که در زبان اسمبلی ، مستقیما بکار گرفته می شوند :
kernel32.dll
user32.dll
shell32.dll
advapi32.dll
kernelbase.dll
GDI.DLL
البته من نمی توانم اسامی تمام فایلهای تشکیل دهنده ی کرنل سیستم عامل ویندوز را در اینجا ذکر کنم !!
از لحاظ امنیتی ، این کار ، خطرناک است !!
ما برنامه نویسان زبان اسمبلی معمولا از همین چند فایل کرنل ویندوز ، برای برنامه نویسی استفاده می کنیم .
البته ما می توانیم با ترفندهای خاص ، نرم افزار ویندوزی را بدون استفاده از این کتابخانه های کرنل ، بسازیم تا نرم افزارمان هک نشود !!
اما خب ، هکرها خودشان به ما یاد دادند که چطوری بدون استفاده از کتابخانه های کرنل ویندوز ، برای ویندوز برنامه بسازیم . پس بازهم خطر هک شدن وجود دارد !!
اینکار را معمولا در یک hex editor (زبان ماشین ) ، انجام می دهند اما با زبان اسمبلی نیز می توانیم اینکار را انجام دهیم
اگر می خواهید بدانید که هر دستور زبان اسمبلی ، دقیقا به کدام دستور زبان ماشین ترجمه می شود کافی است این نرم افزارها را از این وبلاگ ، دانلود نمایید :
C32asm
Spiro
RosAsm
البته هیچ نرم افزاری بخوبی Spiro نمی تواند ترجمه ی عینی و خط به خط و دقیق دستورات اسمبلی به ماشین یا بالعکس را به شما نشان دهد .
نرم افزار Spiro بطور تخصصی برای هک حافظه ی رم و کرک کردن بازی های کامپیوتری و کشف کدهای تقلب بازی هایی همچون GTA بکار می رود !
اما همین Spiro در نمایش رابطه ی نظیر به نظیر بین کدهای زبانهای اسمبلی و ماشین ، از تمام نرم افزارهای مشابه حتی RosAsm و C32Asm نیز بهتر و کارآمدتر است .
زیرا بصورت کاملا زنده و پویا و تعاملی ، این ارتباط نظیر به نظیر را به شما نشان می دهد .
یعنی بطور مثال ، شما دقیقا متوجه می شوید که کد E8 از اسمبل شدن کدام کدهای اسمبلی ، تشکیل می شود !!
یعنی به راز ایجاد کد E8 در زبان ماشین و در محیط هکس ادیتور ، پی می برید !!
یعنی شما می توانید با خیال راحت ، تمام اجزای نرم افزار را با کمک هکس ادیتور ، بسازید
یعنی شما از زبان اسمبلی و تمام زبانهای سطح بالا ، بی نیاز خواهید شد
باوجود این ، متاسفانه Spiro نیز متوقف شده است .
یعنی سازنده اش ، به سمت نرم افزار دیگری رفته است .
لذا من مجبورم مجددا به سمت Fasm برگردم زیرا وبسایت و انجمن و جامعه ی کاربری فعال دارد و هنوز زنده است و در حال توسعه می باشد .
یعنی افرادی مثل من و شما ، در حال توسعه ی فسم می باشند .
لذا این اسمبلر ، عمر جاودانه خواهد داشت و روز به روز قویتر و کاملتر خواهد شد زیرا انسانها از او حمایت می کنند
نکته مهم :
نرم افزار، بدون حمایت انسانها ، خواهد مرد و منسوخ خواهد شد
الان همین MASM یا حتی NASM ، اسمبلرهایی مرده و منسوخ می باشند
این ابزارهای جادویی ظاهرا هیچ ربطی به فسم ندارند و مستقل می باشند و کار را قدری دشوار کرده اند
البته برای Fasm نیز ابزارهای جادویی شبیه به Spiro را ساخته اند که شاید بعدا آنها را در همین وبلاگ ، آپلود نمایم !!
سوال:
آیا بهتر نیست به این جنگ بین اسمبلرها پایان دهیم تا زبانهای سطح بالا ، از این سیاست تفرقه بینداز و حکومت کن ، بر علیه زبان اسمبلی استفاده نکنند ؟؟؟
جواب : چرا بهتر است . برای حفظ انسجام و اتحاد و یکدلی و اسمبلی !! در مقابل دشمن واحد یعنی زبان سطح بالا ، بهتر است به این جنگ احمقانه بین اسمبلرها خاتمه دهیم
ما باید با کمک همین اسمبلرهای گوناگون ، علیه زبانهای سطح بالا شورش و قیام کنیم و آنها را به جهنم واصل کنیم !!
اما باز هم تکرار می کنم :
فسم ، بهترین اسمبلر است زیرا جامعه ی کاربری فعال دارد. یعنی هزاران انسان مثل من و شما ، از او حمایت می کنند .
یعنی حتی برنامه نویسان زبانهای سطح بالا نیز از او حمایت می کنند
خب در چنین شرایطی که یک زبان ، اینقدر هوادار و طرفدار دارد چرا باید او را زبانی مرده یا ضعیف تصور کنم ؟؟؟!!!
وقتی که دوست و دشمن ، زبان اسمبلی Fasm را دوست دارند و تحسین می کنند و حتی برایش نرم افزار و کتابخانه و هدر و ماشین مجازی و سیستم عامل می سازند ، چرا نباید مدعی شوم که زبان Fasm ، بهترین کامپایلر زبان اسمبلی است ؟؟؟؟!!
فسم همان مقدار محبوبیت و کارایی و قدرت دارد که زبانهایی همچون سی پلاس پلاس و پایتون و جاوا و راست و سی شارپ و .... دارند .
آیا این یک مزیت بزرگ محسوب نمی شود ؟؟؟!!
اینکه دوست و دشمن ، از یک زبان حمایت می کنند آیا این مزیتی برای آن زبان محسوب نمی شود ؟؟؟
از لحاظ فنی نیز هزاران مزیت در فسم دیده می شود که برخی از آنها را قبلا گفته ام و دیگه تکرار نمی کنم و برخی دیگر را نیز اگر عمری باشد در پستهای بعدی خواهم گفت .
بهرحال اگر من فقط روی فسم ، تمرکز کنم و از سایر کامپایلرهای زبان اسمبلی و تمام زبانهای سطح بالا ، دوری کنم ، هرگز هیچ چیزی را از دست نداده ام و افسوس نخواهم خورد .
زیرا سایر اسمبلرها و البته تمام زبانهای سطح بالا ، بجز موازی کاری و تولید زباله و چیزهای اضافی و البته تولید نفخ افزار و باد افزار و باگ و حفره امنیتی ، کار دیگری انجام نمی دهند !!
آیا فقدان یک مشت زباله ( در اصطلاح دنیای برنامه نویسی ) ، برای من حسرت و افسوس به دنبال دارد ؟؟؟؟!!
مسلما خیر .
اگر فسم ، در یک جایی اصطلاحا کم آورد ، از زبان ماشین یعنی از hex editor استفاده خواهم کرد . به همین سادگی !!
من هنوز هم WinHex را دوست دارم !!
گرچه جامعه ی کاربری WinHex ، مخفی هستند و دیده نمی شوند ( زیرا همگی کارشناس امنیت سایبری و کارآگاه و حقوقدان و جرم شناس و پلیس بین الملل می باشند ! )
اما من معتقدم که وین هکس ، هنوز هم بهترین گزینه است
البته در میان hex editor ها ( زبان ماشین ) !!
+
+
پایان
در پست بعدی ، از تجربیات ام در دانلود کامل وبسایتهای اسمبلی ، مطالبی خواهم گفت !!
انشاا...