هاربر، دی‌کامپایلر ساده‌‌ای که خودمان آن را ساختیم

07 دی 1398 هاربر، دی‌کامپایلر ساده‌‌ای که خودمان آن را ساختیم

روابط عمومی شرکت ایدکو (توزیع کننده محصولات کسپرسکی در ایران)؛ هر چند وقت یکبار درخواستی دریافت می‌کنیم که ما را به فکر فرو می‌دارد. ابزارهای موجود معمولاً کفاف این نوع درخواست‌ها را نمی‌دهد و درست در همین نقطه است که باید برای حل این «مشکل» ابزارهای سفارشی و مخصوص به خود را بسازیم. یکی از همین درخواست‌هایی که خدمتتان گفتیم برایمان اوایل سال 2018 پیش آمد، وقتی که یکی از مشتریان‌مان –یک مؤسسه‌ی مالی- از ما خواست تا برایش نمونه‌ای را تحلیل کنیم. این مسئله به خودیِ خود چیز نامعمولی نیست- ما همیشه درخواست‌هایی از این قِسم دریافت می‌کنیم- اما آنچه در مورد این درخواستِ بخصوص عجیب بود این بود که نمونه‌ی مذکور مبتنی بر هاربر[1] (Harbour) نوشته شده بود.

هاربر در حقیقت یک زبان برنامه‌نویسی طراحی‌شده توسط آنتونیو لینارز است که اولین بار در سال 1999 عرضه شد. این زبان برنامه‌نویسی بر اساس سیستم قدیمی Clipper بوده و در اصل به منظور ساخت برنامه‌های پایگاه اطلاعاتی مورد استفاده قرار می‌گیرد.

درک داخلی‌های هاربر

بگذارید از تست‌های مخزن هاربر عبارت «سلام، دنیا» یا همان Hello, world را به عنوان نمونه‌ای مد نظر قرار دهیم- hello.prg. 

 

 هاربر، پیام Hello, world را به داخلی پرینت می‌کند. برای انجام این کار شما می‌بایست جهت اجرای کد یک باینری هاربر بسازید (همچنین راه‌های دیگری هم برای اجرای آن بدون ساخت باینری وجود دارد اما ما این روش را از این جهت برگزیریم چون نمونه‌ی دریافت‌شده‌ی یک فایل قابل‌اجرا بود).

کامپایل کردن درست مثل تماس گرفتن آسان است:

hbmk2.exe hello.prg

این فرمان کد C را تولید و کد C را در فایل قابل‌اجرای نهایی کامپایل خواهد کرد. کد C تولید شده برای hello.prg را می‌توان در شکل 2 یافت. 

 

 

شما می‌توانید مشاهده کنید که تابع MAIN تابع ماشین مجازی هاربر (HVM) را با این پارامتر‌ها شروع کرده است: یکی pcode، دیگری کد از پیش کامپایل‌شده‌ی هاربر و در ادامه نمادها که توسط ماکرویی متفاوت بالای تابع MAIN تعریف شده‌اند. همانطور که می‌توانید تصور کنید، pcode (کد پرتابل) حاوی دستوراتی است که HVM تفسیرشان می‌کند. شما می‌توانید در لینک زیر توضیح رسمی این pcode را پیدا کنید.

https://github.com/harbour/core/blob/master/doc/pcode.txt

بعد از اینکه برنامه‌ی C کامپایل شد (در اینجا این برنامه توسط MINGW انجام شده است)، ما تقریباً همان ساختارها را در داخلش نیز پیدا می‌کنیم: جدول نماد و  pcode (شکل 3 و 4 به ترتیب). 

 

 

 

 

پروسه‌ی دی‌کامپایل[2]

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

هدف دی‌کامپایلرِ ما این است که bytecode بتواند به دست انسان‌ خوانده شود. ما انتخاب‌مان این بود که شبه‌کدِ حاصله را در همگذار[3] با C ترکیب شود (هنوز این خوانش در بعضی‌جاها سخت می‌شود اما برای مقاصدی که مدنظر داشتیم قابل‌خواندن بود).

 

 

 

شکل شماره 5 هم نشان می‌دهد هاربری کامپایلر مبتنی بر ماشین پشته‌ای[4] است.

اولین آرگومان فشار[5]، نام تابع است که بعدِ آن متغیرها با فشار جاگذاری شده و به تعاقب‌شان نیز فرمان call 1 می‌آید. درست در همینجاست که 1 می‌شود عددِ تابع پارامترهایی که قرار است پاپ‌آپ شوند.

بنابراین خطوط فوق می‌توانند در شبه‌کد C اینچنین تفسیر شوند:

QOUT("Hello, world!"); 

امیدواریم این دی‌کامپایلر تحلیل نمونه‌هایی که به زبان هاربر نوشته شده‌اند را کمی آسان‌تر کرده باشد.

 

[1] هاربر در واقع یک نرم‌افزار رایگان و باز چند پلت‌فرمه، چند رشته‌ای، اوبژه-محور و یک زبان برنامه‌نویسیِ قابل اسکریپت کردن است که به طور وارونه‌ای با زبان‌های xBase سازگاری دارد. هاربر شامل یک کامپایلر و آرشیوهای ران‌تایم (زمان اجرا) به همراه رابط کاربری چندگانه، پایگاه اطلاعات و یک‌اندهای I/O، سیستم سازه‌ای خودش و نیز مجموعه‌ای از آرشیوها و بایندینگ‌ها (برای API‌های محبوب) می‌شود.

[2] Decompiler، کد برنامه را که در سطح پایینی از انتزاع قرار دارد (معمولاً طراحی شده‌اند که رایانه آن را بخواند) را به شکلی تبدیل می‌کند تا سطح بالایی از انتزاع داشته باشد (معمولاً طراحی شده‌اند که انسان آن را بخواند).

[3] assembler

[4] Stack machine، یک کامپیوتر واقعی یا شبیه‌سازی شده‌است که به جای استفاده از ثبات‌های تکی، از یک پشته برای ارزیابی زیردستورها در برنامه استفاده می‌کند.

[5] push argument

 

منبع: کسپرسکی آنلاین (ایدکو)

کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز می‌شناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکي نام دارد.

محصولات مرتبط

  • Kaspersky Internet Security for Android

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

    7,238,100 ریال
    خرید
  • Kaspersky Cloud Password Manager

    Kaspersky Cloud Password Manager ابزار مدیریت کلمه عبور ابری کسپرسکی (KCPM) ضمن ذخیره ایمن تمامی کلمات عبور مورد استفاده شما برای وبسایت‌ها، اپلیکیشن‌ها، و شبکه‌های اجتماعی آنها را در تمامی ...

    10,860,600 ریال
    خرید
  • Kaspersky Safe Kids

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

    1,086,060 ریال10,860,600 ریال
    خرید
  • Kaspersky Security Cloud Personal

    تمام اپ‌های امنیتیِ ما در دستانتان. به کل خانواده‌ی اپ‌های ما برای دسکتاپ و موبایل دسترسی پیدا کنید. از آنتی‌ویروس گرفته تا ابزارهای حریم خصوصی و اجرایی، هر کدام را به میل ...

    72,443,100 ریال
    خرید
  • Kaspersky Standard

    سیستم امنیتی بهبودیافته به همراه تقویت‌کننده عمکرد دستگاه طرح امنیتی استاندارد ما، نه تنها سیستم امنیتی قدرتمندی را برای انواع ویروس‌ها، بدفزارها و باج‌افزارها ارائه می‌دهد ...

    10,246,500 ریال20,493,000 ریال
    خرید
  • Kaspersky Plus

    امنیت. کارایی. حریم خصوصی. همه در یک برنامه با کاربری آسان کسپرسکی پلاس با ارائه امنیت سایبری نسل بعد، شما در برابر ویروس‌ها، باج‌افزارها و بدافزارهای جدید محافظت کند - بدون ...

    14,693,550 ریال29,387,100 ریال
    خرید
  • Kaspersky Premium

    حفاظت کامل از دستگاه ها، حریم خصوصی و هویت شما با محصول Kaspersky Premium تمام نیازهای امنیتی خود و خانواده‌تان را پوشش دهید. حفاظت پیشرفته ...

    15,718,200 ریال31,436,400 ریال
    خرید
  • Kaspersky Small Office Security

    محافظت در حین کار Kaspersky Small Office Security به طور خاص برای سازمان‌هایی طراحی شده است که 5 تا 50 دستگاه کامپیوتر در خود جای داده‌اند. نصب آن بسیار آسان است؛ مدیریت آن ...

    65,201,550 ریال130,403,100 ریال
    خرید
  • Kaspersky Small Office Security

    امنیت ادارات کوچک

    208,649,100 ریال
    خرید
  • Kaspersky Small Office Security

    امنیت ادارات کوچک

    78,242,550 ریال156,485,100 ریال
    خرید
  • Kaspersky Small Office Security

    250,670,100 ریال
    خرید
  • Kaspersky Small Office Security

    91,283,550 ریال182,567,100 ریال
    خرید
  • Kaspersky Small Office Security

    291,966,600 ریال
    خرید
  • Kaspersky Small Office Security

    104,324,550 ریال208,649,100 ریال
    خرید
  • Kaspersky Small Office Security

    333,987,600 ریال
    خرید
  • Kaspersky Small Office Security

    117,365,550 ریال234,731,100 ریال
    خرید
  • Kaspersky Small Office Security

    375,284,100 ریال
    خرید
  • Kaspersky Small Office Security

    119,539,050 ریال239,078,100 ریال
    خرید
  • Kaspersky Small Office Security

    382,529,100 ریال
    خرید
  • Kaspersky Small Office Security

    168,442,800 ریال336,885,600 ریال
    خرید
  • Kaspersky Small Office Security

    539,021,100 ریال
    خرید
  • Kaspersky Small Office Security

    217,346,550 ریال434,693,100 ریال
    خرید
  • Kaspersky Small Office Security

    695,513,100 ریال
    خرید
  • Kaspersky Small Office Security

    262,627,800 ریال525,255,600 ریال
    خرید
  • Kaspersky Small Office Security

    840,413,100 ریال
    خرید
  • Kaspersky Small Office Security

    498,090,300 ریال996,180,600 ریال
    خرید
  • Kaspersky Small Office Security

    1,593,893,100 ریال
    خرید

نظر خودتان را ارسال کنید


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