آزمایشات-جالب-وحیدمی-در-ویندوز
به نام خدا
آزمایشات-جالب-وحیدمی-در-ویندوز
آزمایش 1 :
موفقیت وحیدمی در نصب و اجرای delphi 6 روی ویندوز 10 و ویندوز 11
خوشبختانه ویندوز 10 و ویندوز 11 ، نرم افزار قدیمی و نیتیو ( بومی ) دلفی 6 را براحتی اجرا می کنند
این دو ویندوز ، ابتدا می گویند که دلفی 6 (delphi 6) مشکلات ناسازگاری دارد
اما بعد که به این هشدار اهمیت ندادم ، توانستم تحت این دو ویندوز جدید و مدرن 64 بیتی ، دلفی 6 نسخه 32 بیتی را اجرا کرده و حتی با آن برنامه نویسی کنم
من تحت دلفی 6 ، به دو زبان پاسکال شیئ گرا و اسمبلی برنامه می نویسم!!
خوشحالم که می توانم حتی در محیط ویندوز 11 نیز اینکار جالب و بامزه را انجام دهم و یک دیکامپایلر دستی را برای زبان پاسکال شیئ گرا بسازم !!
من ابتدا در دلفی 6 و تحت ویندوز 11 ، کلید F9 را فشار می دهم تا برنامه ، کامپایل و بیلد و ران شود
سپس برنامه را می بندم و این بار کلید F7 را فشار می دهم و سپس با ماوس به کنار کد برنامه اشاره کرده و راست کلیک کرده و روی منوی view CPU کلیک می کنم تا پنجره debugger باز شود
در پنجره دیباگر زبان دلفی ، شاهد این کد هستم :
form1.close;
mov eax [form1]
call tcustomform1.close
عبارت form1.close یک دستور زبان پاسکال است که باعث می شود پنجره اصلی برنامه ای که توسط دلفی ساخته شده است ، بسته شود و ما به محیط ویندوز برگردیم
این دستور ، به دو دستور اسمبلی به شکل بالا ، ترجمه می شود
حالا من روی عبارت call tcustomform1.close راست-کلیک کرده و روی واژه ی Follow که فقط در دلفی 6 فعال است و در نسخه های بعدی دلغی ،؛ غیرفعال می باشد ، کلیک می کنم
به محض اجرای اینکار ، به این روتین وارد می شوم :
Tcustom.form1.close;
Assembly instructions
.....
....
....
...
عملا یک دستور کوچک دلفی ، بی جهت به صدها دستور اسمبلی ترجمه می شود !!
این یک فریب بزرگ است
در زبان اسمبلی ، برای بستن پنجره اصلی نرم افزار ، کافی است کد زیر را بنویسید :
asm
xor eax , eax
ret
end;
جالب است که دلفی 6 ، این دو خط دستور جدید اسمبلی را می پذیرد و لازم نیست صدها دستور اسمبلی قبلی را در روتین مربوطه تایپ کنیم !!
من قبلا از دلفی 6 بعنوان یک ویژوال اسمبلر استفاده می کردم !!!
یعنی زمانیکه نمی توانستم با نرم افزارهای زیر ، برنامه نویسی شیئ گرا در زبان اسمبلی را انجام دهم ، از دلفی استفاده می نمودم :
fresh flat assembler
easycode visual assembler ide
RosAsm
Winasm
RadAsm
این تجربه می تواند زبان پاسکال و البته دلفی 6 را از مرگ حتمی نجات دهد و کاری کند که پاسکال بتواند زبانهای سی و سی پلاس پلاس و جاوا و پایتون و سی شارپ و راست را به راحتی شکست دهد !!!
نکته :
من در کنار دلفی 6 ، از برنامه ی فری پاسکال و لازاروس نیز استفاده کردم
فری پاسکال (Free Pascal) بطور کامل توسط خودش یعنی زبان پاسکال ساخته شده است
اما بسیار کند است !!!
دلفی 6 توسط زبانهای اسمبلی و سی پلاس پلاس ساخته شده بود لذا بسیار سریع و قدرتمند بود و هست !!
زیرا همین حالا نیز روی ویندوز 11 ، از سرعت و قدرت بالایی برخوردار است و بسیار سریعتر و قویتر از فری پاسکال و لازاروس می باشد
فری پاسکال و لازاروس گرچه نرم افزار رایگان و اوپن سورس و آزاد هستند و در ویندوز و لینوکس ، محبوبیت دارند اما هنوز خیلی مانده تا به حد و اندازه دلفی 6 برسند
دیباگر لازاروس سعی دارد ادای دیباگر دلفی 6 را در بیاورد
اما هنوز خیلی مانده تا به دلفی 6 برسد
من با مقایسه ی این کدها ، با کدهای تولید شده توسط ابزارهای زیر ، قصد دارم یک دیکامپایلر دستی برای زبان پاسکال بسازم و زبان سی و سی پلاس پلاس را بازنشسته کنم !!
ابزارهای مهندسی معکوس که برای طراحی دیکامپایلر زبان پاسکال بکار می روند عبارتند از :
dede
idr
ghidra
binary ninja
cutter
ida pro
delphi6
free pascal
شاید بتوانم زبان پاسکال را بگونه ای هک کنم که به من اجازه دهد بعد از دستور IF بتوانم همه نوع متغیر را بنویسم و کامپایل کنم
من این تجربه شیرین را قبلا در زبان ویژوال بیسیک 6 داشتم
اما از آنجاییکه زبان ویژوال بیسیک 6 ، روی ویندوزهای 7 به بعد ، اصلا اجرا نمی شود و زبان ویژوال بیسیک دات نت نیز ، بسیار سنگین و ناکارآمد است و به فناوری دات نت فریم ورک آلوده شده است ، لذا من مجبورم زبان پاسکال را وادار کنم که چنین کدی را از من بپذیرد و کامپایل کند "
IF textbox1.text:="vahid" then textbox2.text:="تنها - همیشه تنها "
بله من قصد دارم زبان پاسکال را وادار کنم که بعد از IF بتواند همه نوع متغیر از جمله string را بپذیرد !!
متاسفانه زبان سی و سی پلاس پلاس نه فقط در نسخه های قدیمی بلکه حتی در جدیدترین نسخه هایش ، رابط گرافیکی کاربر ندارد و امکان برنامه نویسی ویژوال و رویدادگرا و شیئ گرا در این زبان وجود ندارد
من هرچقدر که به کدهای زبان سی پلاس پلاس دقت می کنم ،هیچ اثری از برنامه نویسی شیئ گرا و رویدادگرا نمی بینم !!
چه کسی گفته است که زبان سی پلاس پلاس ، یک زبان شیئ گرا و همه منظوره است ؟؟؟
هرکس که بوده یا بی سواد بوده یا متوهم یا دروغگو و شیاد
خوشبختانه زبان اسمبلی از تمام اینها بهتر است زیرا :
اولا از تمام مدل های برنامه نویسی از جمله برنامه نویسی شیئ گرا و ویژوال ، پشتیبانی می کند ( البته با کمی دشواری !! )
ثانیا اسمبلی به شدت انعطاف پذیر و هوشمند است و مثلا اجازه می دهد که بعد از IF ، از تمام انواع داده و متغیر و ثابت استفاده کنیم
مثال :
کاربردهای مختلف IF در زبان اسمبلی :
IF message==WM_CREATE
IF eax
IF al == "book"
IF number == 4
IF a == b
شاید بگویید که این زبان اسمبلی نیست بلکه زبان سی یا سی پلاس پلاس یا پایتون است
اما من می گویم این زبان اسمبلی است . البته اسمبلی سطح بالا
یعنی چیزهایی مثل masm - Fasm-RosAsm-HLA
البته با کمک ماکرو یا پارسر ، می توانید زبان اسمبلی را وادار کنید که کدی شبیه به زبانهای سطح بالا را کامپایل کند
البته زبان اسمبلی ، فقط یک زبان کامپایلی نیست بلکه یک زبان تفسیری نیز می باشد
کافی است به مستندات اسمبلی Fasm رجوع کنید و با زبان تفسیری این اسمبلر قدرتمند آشنا شوید
بله شما در زبان اسمبلی می توانید بعد از IF از تمام انواع داده و متغیر و ثابت استفاده کنید
شاید یکی از دلایل محبوبیت فراوان زبانهای خانواده ی سی و سی پلاس پلاس در این است که در این زبانها نیز همچون زبان اسمبلی ، بعد از IF می توانید انواع داده و ثابت را بنویسید
ضمن اینکه در زبان های خانواده ی سی و سی پلاس پلاس ، نیز همچون زبان اسمبلی ، شما می توانید کامپایلر را طوری تنظیم کنید که کمترین تعداد کد اسمبلی و کد ماشین را تولید کند
طوریکه مثلا به ازای هر دستور زبان سی پلاس پلاس ، فقط یک یا دو دستور زبان اسمبلی تولید شود
اما متاسفانه در پاسکال و بیسیک ، اینکار تقریبا غیرممکن است مگر اینکه این دو زبان را هک کنید و وادار کنید که اینکار را برای شما انجام دهند !!
زبان دلفی 6 با شعار " کمترین مقدار کد پاسکال " عملا مردم را گول زد ، زیرا در پشت پرده ، به ازای هر دستور زبان پاسکال ، صدها و هزاران دستور زبان اسمبلی را تولید کرد !!!
اما با هک زبان پاسکال ، می توانیم او را وادار کنیم که همچون زبانهای سی و سی پلاس پلاس و اسمبلی ، به ازای هر دستور زبان پاسکال ، یک یا دو دستور زبان اسمبلی را تولید کند و بهینه سازی کد را واقعا انجام دهد و از تولید نفخ افزار و ورم افزار خودداری کند
یکی از اهداف من از اجرای دلفی 6 روی ویندوز 11 ، همین است که می خواهم دلفی 6 و البته زبان پاسکال را هک کرده و او را وادار کنم که کارهای بالا را برایم انجام دهد !!
آنوقت می توانم از زبان دلفی 6 تحت تمام ویندوزهای قدیمی و جدید ، بعنوان یک ویژوال اسمبلر استفاده کنم و در هنگام برنامه نویسی با زبان اسمبلی ، در وقت و انرژی و هزینه ، صرفه جویی نمایم .
زبان پاسکال به این امید اختراع شد که شکاف بین زبانهای اسمبلی و بیسیک را پر کند
اما این شکاف هرگز پر نشد
زبان سی و سی پلاس پلاس نیز کار را خرابتر کرد
اما شاید بتوانیم با مهندسی معکوس زبان پاسکال ، این شکاف را که از دهه 1960 میلادی تا به امروز ، هنوز پر نشده است را پر کنیم و از زبان سی پلاس پلاس و فرزندانش بی نیاز شویم
و حتی بتوانیم با کمک زبان پاسکال ، سیستم عامل بسازیم !!
کاری که تا به حال هیچکس انجام نداده است
من هرچقدر جستجو کردم دیدم هیچکس نتوانسته است با کمک زبان پاسکال ، سیستم عامل بسازد
زیرا پاسکال به شدت سطح بالا و سنگین است و تعداد کدهای اسمبلی که تولید می کند خیلی خیلی زیاد هستند و عملا قادر به تولید برنامه های کوچک و سریع سیستمی از قبیل بوت لودر نیست
بوت لودر سیستم عامل ، از همان روز اول تا به امروز ، فقط با زبان اسمبلی ساخته شده است
زیرا حتی زبان برنامه نویسی C نیز نمی تواند یک فایل 512 بایتی یا 256 بایتی را بعنوان بوت لودر بسازد
یعنی حتی زبانی مثل FlatC نیز که بطور کامل با زبان اسمبلی Fasm ساخته شده است ، در بسیاری از مواقع نتوانسته است جایگزین مناسبی بجای Fasm باشد و البته یک زبان متروکه است
یا مثلا زبان سی میناس میناس نیز بطور کامل رها شده است
اینها زبانهایی هستند که قصد دارند زبان سی یا سی پلاس پلاس را به تمام مزایای زبان اسمبلی تجهیز کنند اما شکست خوردند
سیستم عامل ها معمولا با زبانهای اسمبلی و سی ساخته می شوند
شما می توانید کل اجزای سیستم عامل را با زبان اسمبلی بسازید اما بوت لودر را فقط زبان اسمبلی می سازد
زبان اسمبلی به راحتی می تواند بوت لودر سیستم عامل یا سکتور بوت هارد دیسک یا فلش مموری یا دیسک جامد را نه فقط در ابعاد بسیار کوچک یعنی 512 بایت ، بلکه حتی در ابعادی کوچکتر یعنی 256 بایت نیز بسازد !!
شما می توانید با کمک زبان اسمبلی یا ماشین ، بوت لودر یا سکتور بوت را حتی در حد 256 بایت بسازید !!
شما می توانید با کمک زبانهای ماشین و اسمبلی ، سکتورهای هارد دیسک یا فلش مموری را حتی تا حد 256 بایت ، کوچک کنید تا کنترل بیشتری روی سکتورها داشته باشید و بتوانید براحتی سخت افزار را در دست بگیرید و بر سخت افزار مسلط شوید !!
بجز زبانهای ماشین و اسمبلی ، هیچ زبان دیگری قادر نیست ، سکتورهای دیسک را تا این حد ، کوچک و فشرده و مدیریت و کنترل کند .
بله، شما با کمک زبانهای ماشین و اسمبلی می توانید بوت لودر سیستم عامل و سکتورهای دیسک را مدیریت کنید
یعنی کاری کنید که هر سکتور از هارد دیسک یا فلش مموری ، فقط 256 بایت داشته باشد !!!
بجز بوت لودر که همیشه با کمک زبان اسمبلی ساخته می شود ، سایر اجزای سیستم عامل را معمولا با زبان C می سازند
هرچند که خیلی راحت می توانیم تمام اجزای سیستم عامل را با زبان اسمبلی بسازیم اما معمولا اینکار را نمی کنند زیرا کمتر کسی با تمام مزایا و توانایی های زبان اسمبلی آشنا می باشد
از طرفی دیگر ، نیاز به مهندسی معکوس نیز ،باعث می شود که ما بازهم به سمت زبان اسمبلی برویم
زیرا هیچکدام از زبانهای برنامه نویسی سطح بالا قادر نیستند نرم افزار یا سخت افزار را مهندسی معکوس کنند
برای مهندسی معکوس یا هک سخت افزار و نرم افزار ، هیچ ابزاری بهتر از زبانهای ماشین و اسمبلی نیست .
بهرحال اگر کسی هست که هنوز هم دلفی 6 را دوست دارد نگران نباشد زیرا دلفی 6 حتی روی ویندوز 11 نیز اجرا و نصب می شود
اما ویژوال سی پلاس پلاس 6 ، هرگز روی ویندوزهای 7 تا 11 نصب نمی شود
من هرکار کردم نتوانستم زبان ویژوال سی پلاس پلاس 6 را روی ویندوزهای 7 تا 11 نصب کنم
این زبان ویژوال سی پلاس پلاس 6 ، واقعا قدیمی و منسوخ شده است و فقط روی ویندوزهای ایکس پی و قبل تر ، نصب می شود
اما زبان اسمبلی ، روی تمام سیستم عامل ها براحتی اجرا می شود و به هیچ سیستم عاملی وابسته نیست و قابل حمل است
زبان اسمبلی Fasm نه فقط روی تمام سیستم عامل ها اجرا می شود و قابل حمل است ، بلکه برای تمام پردازنده ها و معماری های سخت افزاری نیز ، قابلیت حمل سخت افزاری دارد
یعنی زبان اسمبلی Fasm ، هم از نظر نرم افزاری و هم از نظر سخت افزاری ، یک زبان برنامه نویسی کاملا قابل حمل و عبوری می باشد و به هیچ پلتفرم یا سیستمی ، وابستگی ندارد و یک زبان کاملا آزاد و مستقل و قابل حمل است
سایر آزمایشاتی که روی ویندوز انجام داده ام یا انجام خواهم داد را در پست های بعدی منتشر خواهم کرد
ان شاا...
