바이너리 파일 디스크립터 라이브러리
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
바이너리 파일 디스크립터 (BFD) 라이브러리는 다양한 오브젝트 파일 형식을 처리하기 위한 라이브러리이다. 사이그너스 솔루션스의 데이비드 헨켈-월리스가 개발을 제안했을 때 리처드 스톨만이 어려울 것이라고 말하자, "Big Fucking Deal"이라는 답변에서 유래하여 BFD라는 이름이 붙었다. BFD는 오브젝트 파일의 공통 추상 뷰를 제공하며, 바이트 순서 처리, 32비트/64비트 데이터 변환, 주소 산술 연산 등을 수행한다. 이 라이브러리는 프런트 엔드와 백 엔드로 구성되며, GNU 어셈블러, GNU 링커, GNU 디버거 등 GNU 프로젝트의 핵심 도구에서 사용된다. BFD는 binutils 및 GDB 릴리스에 포함되어 배포되며, 임베디드 시스템 개발에도 중요한 역할을 한다.
더 읽어볼만한 페이지
- 실행 파일 포맷 - EXE
EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다. - 실행 파일 포맷 - COM 파일
COM 파일은 CP/M 및 MS-DOS 운영체제에서 사용된 실행 파일 형식으로, 메타데이터 없이 코드와 데이터로 구성되어 64KB 크기 제한을 가지며, 단순한 구조로 극소의 실행 파일을 만들 수 있지만 보안 취약점도 존재한다. - C 라이브러리 - OpenSSL
OpenSSL은 1998년에 설립된 암호화 도구 프로젝트로, 다양한 암호화 알고리즘과 프로토콜을 지원하며, 아파치 라이선스를 채택했고, 보안 문제와 API 호환성 문제 등의 비판을 받았다. - C 라이브러리 - SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다. - 자유 라이브러리 - Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. - 자유 라이브러리 - SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다.
바이너리 파일 디스크립터 라이브러리 - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
유형 | 라이브러리 |
개발 | Cygnus Solutions |
프로그래밍 언어 | C |
라이선스 | GNU 일반 공중 사용 허가서 |
2. 역사
(내용 없음 - 하위 섹션 '명칭 논란'에서 상세히 다루므로 중복 방지를 위해 생략)
2. 1. 명칭 논란
사이그너스 서포트의 데이비드 헨켈-월리스가 회사에 새로운 사업 기회를 열기 위한 방법으로 이 라이브러리 개발을 제안했을 때, 리처드 스톨만은 어려울 것이라고 말했다. 이에 데이비드 헨켈-월리스는 "Big Fucking Deal"(별거 아니야)이라고 답하며 개발을 맡았고, 이 표현의 약자인 "BFD"가 라이브러리의 이름이 되었다.[1][6] 이후 "바이너리 파일 디스크립터"(Binary File Descriptoreng)라는 명칭이 BFD의 후문자어(백로님)로 만들어졌다.3. 설계
BFD는 다양한 목적 파일 형식을 일관된 방식으로 다루기 위해 설계된 라이브러리로, 목적 파일의 구조를 추상화하여 표현하는 방식으로 동작한다. 내부적으로는 추상화된 데이터를 특정 프로세서와 파일 형식에 맞게 변환하는 작업을 수행한다.
원래 BFD는 여러 개발 도구에서 범용적으로 사용될 수 있는 일반 라이브러리로 구상되었으나, 새로운 시스템 기능을 지원하기 위해 API를 자주 변경해야 하는 문제 때문에 실제로는 주로 GNU 프로젝트의 도구들, 예를 들어 GNU 어셈블러(GAS), GNU 링커(GLD), 기타 GNU 바이너리 유틸리티(binutils) 및 GNU 디버거(GDB) 등에서 핵심적으로 사용되고 있다.[7][8][9][3][4][5] 이러한 이유로 BFD는 독립적으로 배포되지 않고, 대개 binutils나 GDB 배포판에 포함되어 제공된다. 그럼에도 불구하고, BFD는 특히 임베디드 시스템 개발 환경에서 GNU 도구를 활용할 때 중요한 구성 요소로 기능한다.
3. 1. 내부 동작
BFD는 목적 파일에 대한 공통적이고 추상적인 관점을 제공함으로써 작동한다. 목적 파일은 정보를 설명하는 "헤더", 각각 이름, 속성, 데이터 블록을 갖는 가변적인 수의 "섹션", 심볼 테이블, 재배치 엔트리 등으로 구성된다.내부적으로 BFD는 이러한 추상적인 데이터를 대상 프로세서와 특정 파일 형식에서 요구하는 구체적인 비트/바이트 레이아웃으로 변환하는 역할을 한다. 이 과정에는 바이트 순서(예: 리틀 엔디안 호스트와 빅 엔디안 대상 간의 차이) 처리, 32비트와 64비트 데이터 간의 올바른 변환, 그리고 재배치 엔트리에 명시된 주소 계산과 같은 중요한 기능들이 포함된다.[2]
BFD 라이브러리는 논리적으로 프런트 엔드와 백 엔드의 두 부분으로 나눌 수 있다.[2] 프런트 엔드는 사용자가 특정 오브젝트 파일의 내부 구조를 몰라도 상호작용할 수 있도록 공통 인터페이스를 제공한다. 이러한 세부 정보 은닉은 백 엔드의 도움으로 이루어진다. 백 엔드는 각기 다른 오브젝트 파일 형식에 맞춰 프런트 엔드 인터페이스가 작동하도록 구현하는 역할을 담당한다. 새로운 오브젝트 파일 형식을 지원하려면 해당 형식에 맞는 백 엔드를 구현하고 등록해야 한다.[2]
비록 BFD는 원래 다양한 도구에서 범용적으로 사용될 수 있도록 설계되었지만, 새로운 시스템 기능을 지원하기 위해 API를 자주 수정해야 하는 문제 때문에 실제 사용에는 제약이 따르는 경향이 있다.[7][8][9][3][4][5] BFD를 주로 사용하는 도구로는 GNU 어셈블러(GAS), GNU 링커(GLD), 그 외 GNU 바이너리 유틸리티(binutils) 도구들, 그리고 GNU 디버거(GDB)가 있다. 이러한 이유로 BFD는 독립적으로 배포되지 않고, 항상 binutils 및 GDB 배포판에 포함되어 제공된다. 그럼에도 불구하고, BFD는 특히 임베디드 시스템 개발 환경에서 GNU 도구들을 사용하는 데 있어 핵심적인 구성 요소로 자리 잡고 있다.
또한, BFD 라이브러리는 코어 덤프 파일에서 구조화된 데이터를 읽어 들이는 데에도 사용될 수 있다.
3. 2. 구조
BFD는 목적 파일에 대한 공통적이고 추상적인 관점을 제공함으로써 작동한다. 목적 파일은 일반적으로 정보를 서술하는 "헤더", 각각 이름, 속성, 데이터 블록을 가지는 여러 개의 "섹션", 심볼 테이블, 재배치 항목 등으로 구성된다.내부적으로 BFD는 이러한 추상적인 데이터를 대상 프로세서와 특정 파일 형식에서 요구하는 구체적인 비트/바이트 레이아웃으로 변환하는 역할을 한다. 이 과정에는 바이트 순서 차이(예: 리틀 엔디안 시스템과 빅 엔디안 대상 간의 차이) 처리, 32비트와 64비트 데이터 사이의 변환 수행, 재배치 항목에 명시된 주소 계산 등의 작업을 포함한다.
BFD 라이브러리는 논리적으로 프런트 엔드(front-end)와 백 엔드(back-end) 두 부분으로 나눌 수 있다.[2] 프런트 엔드는 사용자가 목적 파일의 구체적인 레이아웃을 알지 못해도 상호작용할 수 있도록, 파일 형식에 독립적인 공통 인터페이스를 제공한다. 실제 파일 형식과의 상호작용 및 세부 정보 처리는 백 엔드에서 담당한다. 새로운 목적 파일 형식을 지원하려면 해당 형식에 맞는 백 엔드를 구현하고 등록해야 한다.
비록 BFD가 원래 다양한 도구에서 사용할 수 있는 일반적인 라이브러리로 설계되었지만, 새로운 시스템 기능을 지원하기 위해 API를 자주 수정해야 하는 문제로 인해 실제 사용은 다소 제한적이었다.[3][4][5][7][8][9] BFD의 주요 사용자로는 GNU 어셈블러 (GAS), GNU 링커 (GLD), 그 외 GNU 바이너리 유틸리티 ("binutils") 도구들, 그리고 GNU 디버거 (GDB)가 있다. 이러한 이유로 BFD는 독립적으로 배포되지 않고, 항상 GDB와 binutils 배포판에 포함되어 제공된다. 그럼에도 불구하고 BFD는 임베디드 시스템 개발 환경에서 GNU 도구들을 사용하는 데 있어 핵심적인 구성 요소로 자리 잡고 있다.
또한, BFD 라이브러리는 코어 덤프 파일에서 구조화된 데이터를 읽어 분석하는 데에도 사용될 수 있다.
4. 활용
BFD는 목적 파일을 정보를 서술하는 "헤더", 각각 이름과 속성 그리고 데이터 블록을 갖는 다양한 개수의 "섹션", 심볼 테이블, 재배치 엔트리 등을 갖는 일반적이고 추상적인 형태로 표현함으로써 동작한다.
내부적으로 BFD는 데이터를 추상적인 관점으로부터 대상 프로세서와 파일 포맷에서 요구되는 비트/바이트 레이아웃으로 변환하는 역할을 수행한다. 이 과정에서 바이트 순서를 처리하고, 32비트와 64비트 표현 사이의 변환을 수행하며, 재배치 엔트리에 명시된 주소를 계산하는 등의 주요 기능을 담당한다.
BFD 라이브러리는 다양한 도구에서 범용적으로 사용될 수 있도록 설계되었지만, 주로 GNU 어셈블러 (GAS), GNU 링커 (GLD), 그 외 GNU 바이너리 유틸리티 ("binutils") 도구들, 그리고 GNU 디버거 (GDB)와 같은 GNU 프로젝트의 핵심 도구들에서 주로 사용된다.[7][8][9] 또한, BFD 라이브러리는 코어 덤프 파일에서 구조화된 데이터를 읽어 들이는 데에도 활용될 수 있다.
4. 1. GNU 프로젝트에서의 역할
BFD 라이브러리는 원래 다양한 도구에서 사용할 수 있는 일반적인 라이브러리로 설계되었지만, 실제로는 GNU 프로젝트의 여러 핵심 도구들과 밀접하게 연관되어 사용된다. BFD의 주요 클라이언트로는 GNU 어셈블러 (GAS), GNU 링커 (GLD), 그 외 GNU 바이너리 유틸리티 ("binutils") 도구들, 그리고 GNU 디버거 (GDB)가 있다.[7][8][9][3][4][5] 이들 도구는 BFD를 이용하여 다양한 목적 파일 형식을 일관된 방식으로 다룰 수 있다.비록 BFD가 범용 라이브러리를 목표로 했으나, 새로운 시스템 기능을 지원하기 위해 API를 자주 수정해야 하는 필요성 때문에 다른 도구에서의 광범위한 사용은 제한되는 경향이 있다.[7][8][9][3][4][5] 결과적으로 BFD는 독립적으로 배포되지 않으며, 항상 binutils 및 GDB 배포판에 포함되어 제공된다. 그럼에도 불구하고 BFD는 임베디드 시스템 개발 환경에서 GNU 도구들을 활용하는 데 있어 핵심적인 구성 요소이다.
4. 2. 예제
예: BFD 라이브러리 API를 사용하여 객체 파일 크기를 인쇄한다.```c
#include "bfd.h"
#include
int main()
{
bfd* abfd = bfd_openr("a.o",NULL);
printf("%llu\n", bfd_get_size(abfd));
return 0;
}
```
빌드 명령:
gcc main.c -lbfd -o output
./output # 크기 인쇄
참조
[1]
웹사이트
Open Sources: Voices from the Open Source Revolution
http://oreilly.com/c[...]
O'Reilly
1999-01
[2]
문서
BFD specification
https://ftp.gnu.org/[...]
[3]
메일링리스트
Re: depending on shared libbfd from binutils-dev
http://lists.debian.[...]
2005-05-22
[4]
메일링리스트
binutils once more
http://lists.fedorap[...]
2010-06-04
[5]
메일링리스트
Re: FreeBSD 4.6 - binutils 2.14 installs useless libbfd
http://www.sourcewar[...]
2003-09-12
[6]
웹사이트
Binary File Descriptor Library manual — History
http://sourceware.or[...]
GNU Project
2007-08
[7]
메일링인용
Re: depending on shared libbfd from binutils-dev
http://lists.debian.[...]
2005-05-22
[8]
메일링인용
binutils once more
http://lists.fedorap[...]
2010-06-04
[9]
메일링인용
Re: FreeBSD 4.6 - binutils 2.14 installs useless libbfd
http://www.sourcewar[...]
2003-09-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com