개요
GNU 어셈블러(GNU Assembler, 약칭 gas)는 GNU 프로젝트에서 개발한 무료 어셈블리 언어 컴파일러이다. gas는 GNU Binutils 패키지의 구성 요소 중 하나이며, 다양한 마이크로프로세서와 운영체제용 바이너리 코드를 생성한다. 주된 목적은 어셈블리 소스 파일을 목적 파일(object file)로 변환하는 것으로, C 언어 컴파일러인 GCC와 연동하여 전체 빌드 체인의 일환으로 사용된다.
역사
- 1991년 GNU 프로젝트는 자유·오픈소스 소프트웨어 환경을 구축하기 위해 GNU Binutils를 시작하였다.
- 초기 버전은 AT&T AT&T AT&T AT&T AT&T 386 어셈블러와 호환성을 목표로 구현되었으며, 이후 다양한 아키텍처 지원을 확대하였다.
- 현재
gas는 GNU Binutils의 핵심 구성 요소로 지속적인 유지·보수가 이루어지고 있다.
주요 특징
| 구분 | 내용 |
|---|---|
| 멀티아키텍처 지원 | x86, x86‑64, ARM, AArch64, MIPS, PowerPC, RISC‑V, SPARC 등 다수의 CPU 아키텍처를 지원한다. |
| 문법 | AT&T 문법을 기본으로 하며, -masm=intel 옵션을 통해 Intel 문법도 사용할 수 있다. |
| 전처리 기능 | C 전처리기(cpp)와 연동하여 매크로, 조건부 어셈블리 등을 제공한다. |
| 디버깅 정보 | DWARF, STABS 등 표준 디버깅 포맷을 포함시킬 수 있다. |
| 플러그인 확장 | Binutils 플러그인 인터페이스를 이용해 사용자 정의 기능을 추가할 수 있다. |
| 라이선스 | GNU 일반 공중 라이선스(GPL) 버전 3(또는 그 이전 버전) 하에 배포된다. |
구조와 동작
- 소스 입력: 어셈블리 파일(
.s또는.asm)을 읽는다. - 전처리: 필요 시 C 전처리 단계가 실행되어 매크로 치환 및 조건부 컴파일이 수행된다.
- 어셈블: 각 명령어를 해당 아키텍처의 기계어(Opcode)로 변환하고, 심볼 테이블을 구축한다.
- 목적 파일 생성: ELF, COFF, Mach-O 등 목표 포맷에 맞춰 목적 파일(
.o)을 만든다.
사용 예시
# 기본 사용
as -o hello.o hello.s
# GCC와 연동
gcc -c hello.s -o hello.o
# Intel 문법 사용
as -masm=intel -o prog.o prog.asm
호환성
- 운영체제: GNU/Linux, BSD 계열, macOS, Windows(가상 환경 또는 Cygwin/MSYS2) 등에서 동작한다.
- 빌드 시스템: Autotools, CMake, Meson 등 주요 빌드 시스템에서 자동으로
gas를 호출하도록 설정할 수 있다.
관련 프로젝트
- GNU Binutils:
gas를 포함한 링커(ld), 오브젝트 덤프(objdump) 등 도구 모음. - GNU Compiler Collection(GCC):
gas를 기본 어셈블러 백엔드로 사용한다. - LLVM: 자체 어셈블러(
llvm-as)를 제공하지만, GNU 환경과의 상호 운용성을 위해gas와 함께 사용되기도 한다.
참고 문서
- GNU Binutils 공식 매뉴얼 (https://www.gnu.org/software/binutils/)
- GNU Assembler 매뉴얼 (
info as) - “The GNU Assembler” – GNU 프로젝트 문서
요약
GNU 어셈블러는 GNU Binutils의 핵심 구성 요소로, 다양한 아키텍처와 운영체제에 대해 자유롭게 사용할 수 있는 오픈소스 어셈블리 컴파일러이다. GPL 라이선스로 배포되며, GCC와의 긴밀한 연동을 통해 C·C++ 등 고급 언어의 빌드 파이프라인에서 필수적인 역할을 수행한다.