آبجکت فایل

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

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

## فرمت‌های آبجکت فایل
**فرمت آبجکت فایل** یک '''فرمت''' رایانه ای است که برای ذخیره‌سازی آبجکت کد و داده‌های مرتبط استفاده می‌شود.

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

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

اکثر فرمت‌های آبجکت فایل به صورت بخش‌های جداگانه ای از داده‌ها طراحی شده‌اند، هر بخش شامل نوع خاصی از داده‌است. این بخش به علت اصطلاح "قطعه حافظه" به عنوان " قطعه " شناخته می‌شود، که سابق رایج‌ترین شکل مدیریت حافظه بود. هنگامی که یک برنامه توسط لودر بر روی حافظه بارگذاری می‌شود، لودر مناطق مختلف حافظه را -به برنامه - اختصاص می‌دهد. بعضی از این مناطق مربوط به قطعه‌های مختلف آبجکت فایل است، و بنابراین معمولاً با نام همان قطعه‌ها شناخته می‌شوند. سایر، مانند پشته، تنها در زمان اجرا وجود دارد. در برخی موارد انتقال توسط لودر (یا لینکر) برای مشخص کردن آدرس‌های واقعی حافظه انجام می‌شود. با این حال، در بسیاری از برنامه‌ها یا معماری‌ها، انتقال(relocation) ضروری نیست زیرا توسط واحد مدیریت حافظه یا کد مستقل از مکان مدیریت و رفع می‌شود. در بعضی از سیستم‌ها قطعه‌های آبجکت فایل می‌توانند بدون نیاز به پردازش بیشتر، به حافظه کپی(page) و اجرا شوند. در این سیستم‌ها این ممکن است با اولویت کم انجام شود، یعنی تنها وقتی که قطعه‌ها در هنگام اجرا مورد ارجاع قرار گیرند، برای مثال از طریق یک فایل نقشه شده حافظه که توسط آبجکت فایل پشتیبانی می‌شود.

انواع داده‌های پشتیبانی شده توسط فرمت‌های معمولی آبجکت فایل:
* سربرگ (اطلاعات توصیفی و کنترل)
* بخش کد ("بخش متن"، کد اجرایی)
* بخش داده‌ها (متغیرهای استاتیک راه اندازی شده)
* بخش داده‌های تنها خواندنی (*rodata ،* ثابت‌های استاتیک)
* بخش BSS (داده‌های استاتیک راه اندازی نشده، هم متغیر و هم ثابت)
* تعاریف خارجی و مراجع برای پیوند دهی
* اطلاعات جابجایی
* اطلاعات پیونددهی پویا
* اطلاعات اشکالزدایی

قطعه‌های آبجکت فایل‌های مختلف ممکن است توسط لینکر با توجه به قوانین مشخص شده در هنگام تعریف قطعه‌ها، ترکیب شوند. قراردادهایی برای قطعه‌های به اشتراک گذاشته شده بین آبجکت فایل‌ها وجود دارد؛ به عنوان مثال، در داس، مدل‌های مختلف حافظه ای وجود دارد که نام‌های قطعه‌های ویژه را مشخص می‌کند و اینکه آیا آنها ممکن است ترکیب شوند یا خیر.

اطلاعات اشکال زدایی ممکن است بخشی داخلی از فرمت آبجکت فایل باشد، همانند COFF، یا فرمت نیمه مستقل که ممکن است با چندین فرمت آبجکت مانند ستونها یا DWARF استفاده شود.

کتابخانه توصیفگر فایل دودویی پروژه گنو (کتابخانه BFD) یک API معمول برای دستکاری آبجکت فایل‌ها در فرمت‌های مختلف فراهم می‌کند.

## منابع

## مطالعه بیشتر
* 

رده:پیاده‌سازی زبان برنامه‌نویسی
رده:صفحات با ترجمه بازبینی‌نشده
رده:قالب‌های پرونده‌ای اجراپذیر
رده:کامپایلرسازی
رده:کتابخانه‌های رایانه