Кіріспе

Орындалатын файл пішімі

Common Object File Format (COFF) – Unix жүйелерінде қолданылатын орындалатын файлдар, объектілік код және ортақ кітапхана компьютерлік файлдарының форматы. Ол Unix System V жүйесінде енгізілді, бұрын қолданылған a.out форматын ығыстырды және SVR4-пен ұсынылған ELF форматымен кеңінен алмастырылмас бұрын XCOFF және ECOFF сияқты кеңейтілген спецификациялардың негізін қалады. COFF және оның түрлері кейбір Unix-қа ұқсас жүйелерде, Microsoft Windows (Portable Executable) жүйесінде, UEFI орталарында және кейбір кіріктірілген әзірлеу жүйелерінде қолданыла береді.

Тарих

Unix-тің бастапқы нысан файл пішімі a.out ортақ кітапханаларды, шетелдік форматты анықтауды немесе нақты мекенжай байланысын тиімді қолдамайды. Unix сияқты жүйелер AT&T ішінде де, сыртында да дамығанда, осы және басқа да мәселелерге әртүрлі шешімдер пайда болды. COFF 1983 жылы AT&T-тің UNIX System V жүйесінде VAX емес, 32 биттік платформалар үшін, мысалы 3B20 үшін енгізілді. Ағымдағы AT&T a.out форматынан жақсартылған өзгерістерге кездейсоқ бөлімдер, нақты процессор жарияланымдары және нақты мекенжай байланысы кірді. Дегенмен, COFF дизайны тым шектеулі және толық емес болды: бөлімдердің максималды санына, бөлім атауларының ұзындығына және бастапқы файлдарға шектеулер қойылды, ал символдық қате туралы ақпарат C сияқты нақты тілдерді, тіпті C++ сияқты жаңа тілдерді немесе жаңа процессорларды қолдауға қабілетсіз болды. Осының салдарынан COFF-тың нақты іске асырылуы міндетті түрде стандартты бұзды. Бұл көптеген COFF кеңейтімдеріне әкелді. IBM AIX-те XCOFF форматын пайдаланды; DEC, SGI және басқалары ECOFF-ты пайдаланды; ал көптеген SysV порттары мен құралдар тізбегі кіріктірілген әзірлемеге бағытталған әрқайсысы өздерінің үйлесімсіз нұсқаларын жасады. SVR4 нұсқасымен AT&T COFF-ты ELF-ке алмастырды. COFF-тың кеңейтілген нұсқалары әлі де кейбір Unix және Unix-қа ұқсас платформаларда, әсіресе кіріктірілген жүйелерде қолданылып келеді, бірақ бүгінде COFF форматының ең кең таралған түрі Microsoft-тың Portable Executable (PE) форматы болып табылады. Windows NT үшін жасалған PE форматы (кейде PE/COFF деп жазылады) нысан файлдары үшін COFF басқасын және орындалатын файлдар үшін PE басқасының құрамдас бөлігі ретінде пайдаланады.

Ерекшеліктері

COFF, a.out-қа қарағанда негізгі жетістігі – нысан файлында бірнеше атаулы бөлімдерді енгізу болды. Әртүрлі нысан файлдарында әртүрлі сандағы және түрдегі бөлімдер болуы мүмкін.

Символды қателерді жөндеу туралы ақпарат

COFF символдық қателерді жою ақпараты бағдарлама функциялары мен айнымалыларының символдық (мәтіндік) аттарынан және үзіліс нүктелерін орнату және орындалуын қадағалау үшін қолданылатын жол нөмірлерінен тұрады. Символдық аттар COFF символдар кестесінде сақталады. Әрбір символдар кестесінің жазбасына атау, сақтау класы, түрі, мәні және бөлім нөмірі кіреді. 8 таңбадан кем немесе тең ұзындықтағы қысқа аттар тікелей символдар кестесіне сақталады; ал ұзын аттар COFF нысанының соңындағы мәтіндік кестеге сілтеме ретінде сақталады. Сақтау кластары символ көрсететін типтік нысанды сипаттайды және сыртқы айнымалыларды (C EXT), автоматты (стек) айнымалыларды (C AUTO), регистрлік айнымалыларды (C REG), функцияларды (C FCN) және тағы да басқаларын қамтуы мүмкін. Символ түрі символдың мәнін түсіндіруді сипаттайды және барлық C дерек типтерінің мәндерін қамтиды. Тиісті опциялармен жинастырылғанда, COFF нысан файлы нысан файлының мәтіндік бөліміндегі әрбір мүмкін үзіліс нүктесі үшін жол нөмірі туралы ақпаратты қамтиды. Жол нөмірлері туралы ақпарат екі түрде болады: біріншісі, кодтың әрбір мүмкін үзіліс нүктесі үшін жол нөмірлері кестесінің жазбасы мекенжайды және оған сәйкес келетін жол нөмірін тіркеп сақтайды. Екінші түрінде жазба функцияның басталуын көрсететін символдар кестесінің жазбасын анықтайды, бұл функцияның атын пайдаланып үзіліс нүктесін орнатуға мүмкіндік береді. COFF-тың жол нөмірлерін немесе қосылған бастапқы кодтың қателерді жою символдарын көрсетуге қабілеті болмағандығын ескеріңіз, бұл COFF қателерді жою ақпаратын үйлесімсіз кеңейтулерсіз дерлік пайдасыз етеді.

Салыстырмалы виртуалды мекенжай

COFF файлы жасалған кезде, оның жадтың қай жеріне жүктелетіні әдетте белгісіз болады. Файлдың бірінші байты жүктелетін виртуалды мекен-жай, бейнелік базалық мекен-жай деп аталады. Файлдың қалған бөлігі міндетті түрде біртұтас блокқа емес, түрлі бөлімдерге жүктеледі. Салыстырмалы виртуалды мекенжайларды (RVA) стандартты виртуалды мекенжайлармен шатастырмау керек. Салыстырмалы виртуалды мекенжай – файл кескінінің базалық мекенжайынан азайтылғаннан кейін, файлдан алынған объектінің виртуалды мекенжайы. Егер файл дискіден жадқа тікелей бейнеленетін болса, RVA файл ішіндегі офсетке тең болар еді, бірақ мұндай жағдай сирек кездеседі. RVA термині тек бейне файлдағы объектілерге қатысты қолданылады. Жадқа жүктелгеннен кейін бейнелік базалық мекенжай қосылады және қалыпты виртуалды мекенжайлар қолданылады.

Қиындықтар

COFF файлының бас жазбасы нысан файлының жасалған күні мен уақытын 32 биттік бинарлық бүтін сан түрінде сақтайды, бұл 1970 жылдың 1 қаңтары, 00:00:00 UTC Unix дәуірінен бергі секундтар санын көрсетеді. 2038 жылдың 19 қаңтарынан кейінгі күндерді осы форматта сақтау мүмкін емес, соның салдарынан 2038 жыл мәселесі туындайды.