آبجکت فایل
یک آبجکت فایل یک فایل حاوی آبجکت کد است ،که این به معنی کد ماشین با قابلیت جابجایی است که معمولاً به طور مستقیم اجرایی نیست. فرمت های مختلفی برای فایل های هدف وجود دارد، و همان آبجکت کد را می توان در فایل های هدف مختلف بسته بندی کرد. یک آبجکت فایل ممکن است مانند یک کتابخانه به اشتراک گذاشته شده نیز کار کند.
علاوه بر آبجکت کد، فایلهای اجرایی ممکن است شامل فراداده مورد استفاده برای متصل کردن یا اشکالزدایی قطعه کد ها باشند، از جمله: اطلاعات برای حل متقابل مرجع نمادین بین ماژول های مختلف، اطلاعات جابجایی ، اطلاعات بازکردن پشته ، توضیحات کد ، نمادهای برنامه، اطلاعات اشکال زدایی یا پروفایلینگ کد.
فرمت های آبجکت فایل
فرمت آبجکت فایل یک فرمت رایانه ای است که برای ذخیره سازی آبجکت کد و داده های مرتبط استفاده می شود.
فرمت های مختلف زیادی از آبجکت فایل وجود دارد. در ابتدا هر نوع کامپیوتر دارای فرمت منحصر به فرد خود بود، اما با ظهور یونیکس و سایر سیستم عامل های قابل حمل ، برخی فرمت ها مانند COFF و ELF تعریف شده و مورد استفاده در انواع سیستم ها قرار گرفتند. این امکان وجود دارد که یک فرمت فایل هم به عنوان ورودی و هم به عنوان خروجی لینکر و به این ترتیب به عنوان کتابخانه و فرمت اجرایی مورد استفاده قرار گیرد.
طراحی و / یا انتخاب فرمت آبجکت فایل یک بخش کلیدی از طراحی سیستم کلی است. این موضوع بر عملکرد لینکر و در نتیجه برنامه نویس در حال توسعه تاثیر می گذارد. اگر فرمت برای فایل های اجرایی مورد استفاده قرار گیرد، نحوه طراحی بر مدت زمان اجرای برنامه د و بنابراین پاسخ برای کاربران تاثیر می گذارد.
اکثر فرمت های آبجکت فایل به صورت بخش های جداگانه ای از داده ها طراحی شده اند، هر بخش شامل نوع خاصی از داده است. این بخش به علت اصطلاح "قطعه حافظه" به عنوان " قطعه " شناخته می شود، که سابق رایج ترین شکل مدیریت حافظه بود . هنگامی که یک برنامه توسط لودر بر روی حافظه بار گذاری می شود ، لودر مناطق مختلف حافظه را -به برنامه - اختصاص می دهد. بعضی از این مناطق مربوط به قطعه های مختلف آبجکت فایل است، و بنابراین معمولاً با نام همان قطعه ها شناخته می شوند. سایر، مانند پشته، تنها در زمان اجرا وجود دارد. در برخی موارد انتقال توسط لودر (یا لینکر) برای مشخص کردن آدرس های واقعی حافظه انجام می شود. با این حال، در بسیاری از برنامه ها یا معماری ها، انتقال(relocation) ضروری نیست زیرا توسط واحد مدیریت حافظه یا کد مستقل از مکان مدیریت و رفع می شود. در بعضی از سیستم ها قطعه های آبجکت فایل می توانند بدون نیاز به پردازش بیشتر، به حافظه کپی(page) و اجرا شوند. در این سیستم ها این ممکن است با اولویت کم انجام شود ، یعنی تنها وقتی که قطعه ها در هنگام اجرا مورد ارجاع قرار گیرند ،برای مثال از طریق یک فایل نقشه شده حافظه که توسط آبجکت فایل پشتیبانی می شود.
انواع داده های پشتیبانی شده توسط فرمت های معمولی آبجکت فایل:
- سربرگ (اطلاعات توصیفی و کنترل)
- بخش کد ("بخش متن"، کد اجرایی)
- بخش داده ها ( متغیرهای استاتیک راه اندازی شده)
- بخش داده های تنها خواندنی ( rodata ، ثابت های استاتیک )
- بخش BSS (داده های استاتیک راه اندازی نشده،هم متغیر و هم ثابت)
- تعاریف خارجی و مراجع برای پیوند دهی
- اطلاعات جابجایی
- اطلاعات پیونددهی پویا
- اطلاعات اشکالزدایی
قطعه های آبجکت فایل های مختلف ممکن است توسط لینکر با توجه به قوانین مشخص شده در هنگام تعریف قطعه ها، ترکیب شوند. قرارداد هایی برای قطعه های به اشتراک گذاشته شده بین آبجکت فایل ها وجود دارد؛ به عنوان مثال، در DOS ، مدل های مختلف حافظه ای وجود دارد که نام های قطعه های ویژه را مشخص می کند و اینکه آیا آنها ممکن است ترکیب شوند یا خیر.
اطلاعات اشکال زدایی ممکن است بخشی داخلی از فرمت آبجکت فایل باشد، همانند COFF ، یا فرمت نیمه مستقل که ممکن است با چندین فرمت آبجکت مانند ستونها یا DWARF استفاده شود.
کتابخانه توصیفگر فایل دودویی پروژه گنو ( کتابخانه BFD) یک API معمول برای دستکاری آبجکت فایل ها در فرمت های مختلف فراهم می کند.
منابع
<references group="" responsive="">
- ↑ IBM Corporation (1973). IBM OS Linkage Editor and Loader (PDF). Archived from the original (PDF) on 5 July 2012. Retrieved 1 July 2013.
- ↑ Irvine, Kip R. (1993), Assembly language for the IBM-PC (2nd ed.), New York: Macmillan, ISBN 0-02-359651-1
مطالعه بیشتر
- Levine, John R. (2000). Linkers & Loaders. Morgan Kaufmann Publishers. p. 256. ISBN 1-55860-496-0.