Бинарлық файл дескрипторы кітапханасы: BFD тарихы мен мүмкіндіктері
Binary File Descriptor library
GNU BFD кітапханасы: түрлі форматтағы объекті файлдарын өңдеуге арналған, 50-ден астам форматты қолдайтын қуатты құрал. Тарихы мен аты туралы қызықты фактілер!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Бинарлық файлдарды сипаттаушы кітапханасы (Binary File Descriptor - BFD) — әр түрлі форматтағы объект файлдарын портативті түрде өңдеуге арналған GNU жобасының негізгі құралы. 2003 жылғы мәліметтер бойынша, ол шамамен 25 процессор архитектурасы үшін 50-ге жуық файл форматтарын қолдайды.
The Binary File Descriptor library (BFD) is the GNU Project's main mechanism for the portable manipulation of object files in a variety of formats. as of 2003, it supports approximately 50 file formats for some 25 instruction set architectures.
Тарих
Цигнус Саппорт компаниясының Дэвид Хенкель Уоллес кітапхананы компанияға жаңа бизнес мүмкіндіктерін ашу жолы ретінде дамытуды ұсынғанда, Ричард Столлман мұның қиын болатынын айтты; Дэвидтің жауабы бұл "үлкен мәселе емес" болды. "BFD" деп қысқартылған бұл кітапхананың аты болды. "Биналық файл дескрипторы" кейіннен "BFD" дегеннің кері акроним ретінде ойлап табылды.
When David Henkel Wallace of Cygnus Support proposed developing the library as a way to open up new business opportunities for the company, Richard Stallman said that it would be difficult; David's response was that it wasn't such a "Big Fucking Deal". Abbreviated to "BFD", this became the library name. "Binary File Descriptor" was invented later as a backronym for "BFD".
Дизайн
BFD объект файлдарының ортақ абстрактілі көрінісін ұсыну арқылы жұмыс істейді. Объект файлында сипаттамалық ақпаратты қамтитын "бас бөлігі" болады; әрқайсысының аты, белгілі бір атрибуттары және дерек блогы бар "бөлімдердің" өзгеретін саны; символдар тізімі; қайта орналастыру жазбалары және т.б. Ішкі жүйеде BFD деректерді абстрактілі көріністен мақсатты процессор мен файл форматы үшін қажетті бит/байт құрылымының егжей-тегжейіне аударады. Оның негізгі қызметтеріне байт ретінің айырмашылықтарын (мысалы, кішкентай эндиандық хост пен үлкен эндиандық мақсат арасындағыдай), 32 биттік және 64 биттік деректерді дұрыс түрлендіруді, сондай-ақ қайта орналастыру жазбаларында көрсетілген адрес арифметикасының егжей-тегжейін қамтиды. BFD кітапханасын логикалық тұрғыдан екі бөлікке бөлуге болады: алдыңғы және артқы бөлік. Алдыңғы бөлік негізгі объект файл көрінісіне тәуелсіз ортақ интерфейсті ұсынады. Пайдаланушылар осы интерфейс арқылы объект файлдарымен өзара әрекеттеседі. Объект файлдарының құрылымын пайдаланушы білмесе де, интерфейсті пайдалана алады. Бұл егжей-тегжейлі ақпаратты жасыру артқы бөлік көмегімен жүзеге асырылады. Артқы бөлік алдыңғы бөліктің интерфейсінің объект файлдарының құрылымымен қалай өзара әрекеттесетінін іске асырады. Жаңа объект файлдарының түрі енгізілген кезде, артқы бөлік осы түрін тіркеуі және BFD қолданбасымен қолдау көрсету қажет болса, оны іске асыруы керек. BFD бастапқыда көптеген құралдармен пайдалануға болатын жалпы кітапхана ретінде жобаланған болса да, жаңа жүйелердің мүмкіндіктерін қамтамасыз ету үшін API-мен жиі түзетулер жасау қажеттілігі оның қолданылуын шектеді; BFD-нің негізгі клиенттері GNU Assembler (GAS), GNU Linker (GLD), басқа GNU Binary Utilities ("binutils") құралдары және GNU Debugger (GDB) болып табылады. Нәтижесінде, BFD жеке таралмайды, бірақ әрқашан binutils және GDB нұсқаларымен бірге келеді. Дегенмен, BFD - енбелгі жүйелерді әзірлеу үшін GNU құралдарын пайдаланудағы маңызды компонент. BFD кітапханасын өзекті төгілмеден (core dump) құрылымды деректерді оқу үшін пайдалануға болады.
BFD works by presenting a common abstract view of object files. An object file has a "header" with descriptive info; a variable number of "sections" that each has a name, some attributes, and a block of data; a symbol table; relocation entries; and so forth. Internally, BFD translates the data from the abstract view into the details of the bit/byte layout required by the target processor and file format. Its key services include handling byte order differences, such as between a little endian host and big endian target, correct conversion between 32 bit and 64 bit data, and details of address arithmetic specified by relocation entries. BFD library can be logically divided into two parts. The front end and the back end. The front end gives a common interface independent of underlying object file view. Users will be interacting with the object files with this interface. Even if the layout of the object files are not to known the user, user still be able to use the interface. This hiding of the detail is done with the help of the back end. The back end implements how the front end interface interacts with the object files layout. Whenever a new object files type is introduced the back end needs to register the type and implement it if it needs to be supported by the BFD application. Although BFD was originally designed to be a generic library usable by a wide variety of tools, the frequent need to tinker with the API to accommodate new systems' capabilities has tended to limit its use; BFD's main clients are the GNU Assembler (GAS), GNU Linker (GLD), and other GNU Binary Utilities ("binutils") tools, and the GNU Debugger (GDB). As a result, BFD is not distributed separately, but is always included with releases of binutils and GDB. Nevertheless, BFD is a critical component in the use of GNU tools for embedded systems development. The BFD library can be used to read the structured data out of a core dump.