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

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

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

    5,038,400 ریال
    خرید
  • Kaspersky Internet Security for Android

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

    1,678,400 ریال
    خرید
  • Kaspersky Total Security

    خانواده، نهادی ارزشمند است؛ پس بالاترین سطح امنیتی خود را به آن اختصاص داده‌ایم. توتال سکیوریتی کسپرسکی به خانواده‌ی شما کمک می‌کند: وقتی دارند در اینترنت گشت می‌زنند، خرید ...

    6,718,400 ریال
    خرید
  • Kaspersky Cloud Password Manager

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

    2,518,400 ریال
    خرید
  • Kaspersky Safe Kids

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

    2,518,400 ریال
    خرید
  • Kaspersky Antivirus

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

    3,358,400 ریال
    خرید
  • Kaspersky Small Office Security

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

    6,048,000 ریال
    خرید

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


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