پروژه امتیازی کامپایلر
در رایانش، کد اجراپذیر یا فایل اجراپذیر یا برنامهی اجراپذیر، که به اختصار به آن اجراپذیر میگویند، باعث میشود که یک رایانه «عملیاتهای مشخص شده توسط دستورالعملهای کد شده»[۱] را اجرا کند که این برخلاف فایل داده است که باید توسط یک برنامهی تجزیهکننده به یک چیز معنادار تبدیل شود.
تعبیر و تفسیر دقیق آن به کاربرد بستگی دارد؛[۲] معمولاً «دستورالعملها» به معنی دستورالعملهای کد ماشین به منظور اجرا بر روی پردازندهی فیزیکی است؛ در برخی زمینهها ممکن است که یک فایل که حاوی دستورات بایتکد یا زبان اسکریپتنویسی است، اجراپذیر در نظر گرفته شود.
انواع فایل اجراپذیر
[ویرایش]فایلهای اجراپذیر را میتوانند به صورت دستی به زبان ماشین نوشته شده باشند؛ اگرچه بسیار آسانتر است که یک برنامه را به شکل کد منبع در یک زبان برنامهنویسی سطح بالا نوشت که درک آن برای انسان آسانتر است. در برخی موارد نیز ممکن است کد منبع به زبان اسمبلی نوشته شود به شکلی که توسط انسان قابل خواندن باشد و همزمان با دستورالعملهای کد ماشین ارتباط نزدیکی داشته باشد. یک زبان برنامهنویسی سطح بالا توسط یک کامپایلر با به کد ماشین اجراپذیر و یا به نوعی آبجکت فایلِ حاوی کد ماشین اجراناپذیر (غیر اجراپذیر) تبدیل میشود؛ به فرایند معادل آن بر روی کد منبع زبان اسمبلی، اسمبلی (مونتاژ) گفته میشود. چندین آبجکت فایل به یکدیگر میپیوندند تا یک اجراپذیر ساخته شود. آبجکت فایلها -- چه اجراپذیر باشند یا نباشند -- معمولاً در یک ساختار محموله مانند فرمت اجرایی و مرتبط (ELF) قرار دارند.[۳] آنگاه این ساختارها هستند که مولد کد ماشین هستند؛ به عنوان مثال، آن را به بخشهایی مانند text. (کد اجراپذیر)، داده (متغیرهای ایستا) و rodata. (ثابتهای ایستا) تقسیم میکند.
به جهت آن که بتوان فایل اجراپذیر را روی یک سیستم (مانند یک سیستمعامل، سفتافزار یا بارگذار بوت) اجرا کرد، باید با رابط دودویی نرمافزار (ABI) دستگاه مطابقت داشته باشد.[۴] معمولاً خیلی ساده، یک فایل به وسیلهی بارگذاری آن فایل روی حافظه و پرش به آغاز فضای آدرس و سپس اجرا از آنجا، اجرا میشود؛ اما در رابطهای پیچیدهتر، فایلهای اجراپذیر دارای ابردادهی اضافی هستند که نقطهی ورود را مشخص میکند. به عنوان مثال، در ELF، نقطهی ورود به وسیلهی میدان e_entry
در سرآمد مشخص میشود که بیانگر آدرس حافظه (مجازی) است که در آن باید اجرا را آغاز کرد. در GCC (کلکسیون کامپایلرهای گنو)، این میدان توسط پیوندهدهنده براساس نماد start_
تعیین میشود.
همچنین فایلهای اجراپذیر معمولاً شامل یک سیستم زمان اجرا هستند که ویژگیهای زبان زمان اجرا (مانند زمانبندی، مدیریت استثناء، فراخوانی سازندهها و تخریبکنندههای ایستا و ...) و تعاملات با سیستمعامل، به ویژه گذر دادن نشانوندها، محیط، بازگرداندن وضعیت خروج، همراه با سایر ویژگیهای راهاندازی و خاموشکردن مانند آزادسازی منابع همجون توصیفگر پرونده را پیادهسازی میکند. در زبان C، این عمل به وسیلهی پیوند زدن درون شیء crt0، که شامل نقطهی ورود حقیقی است و با فراخوانی کتابخانه زمان اجرا، راهاندازی و خاموشکردن را انجام میدهد، انجام میشود.[۵]
بنابراین، فایلهای اجرایی معمولاً حاوی مقدار قابل توجهی از کد ماشین هستند که جدا از کد ماشینی است که توسط کد منبع تولید میشود. در برخی موارد بهتر است از آن صرف نظر شود؛ به عنوان مثال، برای توسعهی سیستمهای نهفته یا صرفاً برای درک چگونگی کار کامپایل شدن، پیوندزنی و بارگذاری. در زبان C، میتوان این کار را حذف زمان اجرای معمول انجام داد و در عوض، صریحاً یک اسکریپت پیونددهنده را مشخص کرد که نقطهی ورود را مشخص میکند و راهاندازی و خاموش کردن را انجام میدهد؛ مانند فراخوانی main
که به منظور شروع و بازگرداندن وضعیت خروج به کرنل، در انتها میباشد.[۶]
جستارهای وابسته
[ویرایش]منابع
[ویرایش]- ↑ "executable". Merriam-Webster's Online Dictionary. Merriam-Webster. Retrieved 2008-07-19.
- ↑ "Machine Instructions". GeeksforGeeks (به انگلیسی). 2015-11-03. Retrieved 2019-09-18.
- ↑ "Chapter 4: Object Files". refspecs.linuxbase.org. Retrieved 2019-09-18.
- ↑ Boelen, Michael (2019-05-15). "The 101 of ELF files on Linux: Understanding and Analysis - Linux..." Linux Audit (به انگلیسی). Retrieved 2019-09-18.
- ↑ content, Tim Fisher Tim Fisher has 30+ years' professional technology support experience He writes troubleshooting; Lifewire, is the General Manager of. "List of Executable File Extensions". Lifewire (به انگلیسی). Retrieved 2019-09-18.
- ↑ McKellar, Jessica (Mar 16, 2010). "Hello from a libc-free world! (Part 1)".
پیوند به بیرون
[ویرایش]- EXE File Format at What Is