헥사 편집기(Hexa editor) 또는 헥사 코드 편집기(Hexa code editor)는 기존의 일반 컴퓨터 워드프로세서 및 텍스트 편집기 소프트웨어에서 읽을 수 없는 이진 파일(binary file)을 읽고 편집할 수 있는 프로그램을 통틀어 이르는 용어이다. 영어로는 헥스 에디터(hex editor), 바이너리 에디터(binary editor), 바이트 에디터(byte editor) 등으로도 불린다.
개념과 특징
"헥사(hexa)"는 16진수(hexadecimal)를 의미하며, 헥사 편집기는 파일의 원시 데이터를 16진수 바이트 단위로 표시하고 수정하는 기능을 제공한다. 일반 텍스트 편집기가 텍스트 파일을 문자 단위로 해석하여 표시하는 것과 달리, 헥사 편집기는 파일을 이진 데이터 그대로의 형태로 보여주므로 파일 포맷의 정확한 구조를 직접 확인할 수 있다.
헥사 편집기의 화면은 일반적으로 두 영역으로 나뉘어 표시된다. 한쪽에는 파일의 각 바이트가 16진수 값으로 배열되어 있고, 다른 쪽에는 동일한 바이트에 해당하는 ASCII 문자 표현이 함께 표시된다. 인쇄할 수 없는 ASCII 문자는 일반적으로 점(".")으로 나타낸다. 데이터는 흔히 4바이트씩 4개 그룹 또는 8바이트씩 2개 그룹으로 묶여 표시된다.
주요 용도
헥사 편집기는 다음과 같은 다양한 작업에 활용된다.
- 손상된 파일 데이터의 복구 및 수정
- 파일 포맷 구조의 분석과 리버스 엔지니어링
- 실행 프로그램의 패치(기존 소프트웨어를 재컴파일하지 않고 일부 명령어를 변경·추가하는 작업)
- 저장 게임 데이터나 각종 설정 파일의 직접 편집
- 디스크나 메모리 내부 데이터의 확인과 수정
- 소프트웨어 개발 과정에서의 디버깅과 학습 도구
부가 기능
일부 고급 헥사 편집기는 템플릿(template) 시스템을 제공하여, 이진 파일의 바이트 배열을 파일 포맷에 맞춰 구조화된 형태로 표시한다. 이를 통해 사용자는 원시 바이트를 직접 해석하지 않고도 문자열, 색상, 10진수 등 적절한 형식으로 개별 값을 편집할 수 있다.
또한 스크립팅 시스템을 갖춘 편집기도 존재한다. 이러한 시스템은 반복적인 편집 작업을 자동화하는 매크로 기능을 제공하며, 게임 치트, 모딩, 커뮤니티 제공 수정본 등의 자동 패치를 작성하는 데 사용될 수 있다. 스크립트 언어는 제품마다 다양하여, 특정 제품 고유의 언어부터 Lua나 Python과 같은 완전한 스크립트 언어를 지원하는 경우도 있다.
일부 편집기는 플러그인(plugin) 시스템을 갖추고 있어 GUI 확장과 새로운 기능 추가를 가능하게 한다.
역사적 배경
컴퓨터의 발명과 다양한 파일 포맷의 생성 이후, 데이터를 일련의 원시 숫자로 직접 접근할 필요가 있는 특수한 상황이 발생하였다. 초기 사례로는 IBM OS/360 시스템용 프로그램인 SUPERZAP(AMASPZAP)이 있으며, 이는 원시 디스크 레코드를 편집하고 실행 파일의 형식을 이해할 수 있었다. 현재 표준으로 널리 사용되는 것은 16진수 표기법으로, 대부분의 컴퓨터와 파일 포맷이 8비트 바이트 단위로 데이터를 처리하기 때문이다.
대표적인 헥사 편집기
헥사 편집 기능을 제공하거나 헥사 편집기로 분류되는 대표적인 소프트웨어로는 울트라에디트(UltraEdit), 에디트플러스(EditPlus), 노트패드++(Notepad++), HxD, GNU 이맥스(Emacs), Vim 등이 있다. 또한 마이크로소프트 비주얼 스튜디오 코드(Visual Studio Code)용 확장 기능으로 Hex Editor가 제공된다.