본문 바로가기
코딩취미/Python

IntelHex Python 모듈을 활용한 HEX & BIN 파일 검증 방법

by 브링블링 2025. 2. 23.
반응형

IntelHex Python 모듈을 활용한 HEX & BIN 파일 검증 방법

🔍 개요

펌웨어 개발 및 마이크로컨트롤러 프로그래밍을 하다 보면 HEX 파일과 BIN 파일을 다룰 일이 많습니다. 이 파일들이 올바른 형식인지, 데이터 구조에 문제가 없는지 검증하는 과정은 매우 중요합니다.

이 글에서는:

  • HEX 파일과 BIN 파일의 차이점
  • IntelHex Python 모듈을 사용한 HEX 파일 검증 방법
  • 파일 내 데이터 구조 문제 확인 및 해결 방법
    을 초보자도 쉽게 이해할 수 있도록 정리해 보겠습니다.

1️⃣ HEX 파일과 BIN 파일이란?

파일 형식 설명 특징
HEX 파일 인텔 HEX 포맷의 텍스트 기반 파일 ASCII로 저장되며, 주소, 데이터, 체크섬 포함
BIN 파일 순수한 바이너리 데이터 메모리 덤프 그대로 저장, 구조적 정보 없음

 

💡 HEX 파일은 사람이 읽을 수 있는 ASCII 형식으로 구성된 반면, BIN 파일은 순수한 바이너리 데이터이므로 직접 읽을 수 없습니다.

📂 HEX 파일과 BIN 파일을 확인하는 방법

  1. HEX 파일 확인
    • 메모장, VS Code 등의 텍스트 편집기로 열어 확인 가능
    • 헥사 에디터(HxD, Notepad++) 사용하면 가독성이 높아짐
    • IntelHex 모듈로 데이터 구조 확인 가능
  2. BIN 파일 확인
    • 텍스트 편집기로 열어도 의미 없는 값이 보임
    • HxD, Binwalk, IDA Pro 등으로 분석 가능

2️⃣ IntelHex 모듈을 활용한 HEX 파일 검증

🔹 IntelHex 모듈 설치

먼저 Python의 intelhex 모듈을 설치해야 합니다.

pip install intelhex

🔹 HEX 파일을 검증하는 코드

아래 코드에서는 IntelHex 모듈을 사용하여 HEX 파일을 로드하고, 정상적인 파일인지 검증합니다.

from intelhex import IntelHex

def validate_hex_file(file_path):
    try:
        # IntelHex 객체 생성 및 파일 로드
        ih = IntelHex()
        ih.loadhex(file_path)

        print(f"✅ {file_path} is a valid HEX file and loaded successfully.")
        return True
    except Exception as e:
        print(f"❌ Error in HEX file: {e}")
        return False

# HEX 파일 경로 입력
file_path = "example.hex"

# 검증 실행
is_valid = validate_hex_file(file_path)
if is_valid:
    print("✔ HEX file verification passed.")
else:
    print("⚠ HEX file verification failed.")

🔍 설명

  • IntelHex().loadhex(file_path): HEX 파일을 불러오고 내부 구조를 파싱
  • 예외 발생 시 올바르지 않은 파일로 판단

💡 출력 예시

✅ example.hex is a valid HEX file and loaded successfully.
✔ HEX file verification passed.

 

파일이 손상되었거나 포맷이 잘못된 경우:

❌ Error in HEX file: Record at line 12 has invalid checksum.
⚠ HEX file verification failed.
반응형

3️⃣ 파일 내 데이터 구조 문제 확인 및 해결 방법

HEX/BIN 파일을 검증하는 과정에서 데이터 구조가 잘못되었거나 손상된 경우가 있습니다. 이를 확인하고 해결하는 방법을 정리해 보겠습니다.

🔍 HEX 파일의 데이터 구조 확인 방법

방법 설명
헥사 에디터 사용 HxD, Notepad++로 데이터 구조 확인
IntelHex 모듈 활용 IntelHex를 사용해 로드 및 분석
체크섬 검증 레코드 끝부분의 체크섬 값 확인
파일 변환 hex2bin을 사용하여 BIN 변환 후 비교

🔹 HEX 파일 데이터 구조 확인 코드 (IntelHex 활용)

from intelhex import IntelHex

def analyze_hex_file(file_path):
    try:
        ih = IntelHex()
        ih.loadhex(file_path)

        print(f"✅ {file_path} loaded successfully.")

        # 데이터 주소 범위 출력
        print(f"Memory Range: {hex(ih.minaddr())} - {hex(ih.maxaddr())}")

        # 일부 데이터 미리보기
        print("First 16 bytes of data:", ih.tobinarray(start=ih.minaddr(), size=16))

        return True
    except Exception as e:
        print(f"❌ HEX file analysis failed: {e}")
        return False

# 분석 실행
file_path = "example.hex"
analyze_hex_file(file_path)

 

💡 출력 예시

✅ example.hex loaded successfully.
Memory Range: 0x0 - 0x7FFF
First 16 bytes of data: [0x12, 0x34, 0x56, 0x78, ...]

4️⃣ HEX ↔ BIN 변환 방법

HEX 파일이 손상되었거나 포맷이 맞지 않을 때, BIN 파일로 변환하여 검증하는 방법도 있습니다.

🔹 HEX → BIN 변환

from intelhex import IntelHex

def hex_to_bin(hex_file, bin_file):
    ih = IntelHex(hex_file)
    ih.tofile(bin_file, format='bin')
    print(f"✅ Converted {hex_file} to {bin_file}")

# 실행
hex_to_bin("example.hex", "output.bin")

🔹 BIN → HEX 변환

from intelhex import IntelHex

def bin_to_hex(bin_file, hex_file, start_addr=0):
    ih = IntelHex()
    ih.loadbin(bin_file, offset=start_addr)
    ih.tofile(hex_file, format='hex')
    print(f"✅ Converted {bin_file} to {hex_file}")

# 실행
bin_to_hex("output.bin", "reconverted.hex")

🔥 마무리

이 글에서는 HEX 파일과 BIN 파일을 검증하는 방법IntelHex Python 모듈을 사용한 파일 분석 방법을 알아보았습니다.

💡 정리

  1. HEX 파일과 BIN 파일 차이점 이해
  2. IntelHex 모듈을 활용한 파일 검증
  3. 파일 내 데이터 구조 확인 및 해결 방법
  4. HEX ↔ BIN 변환을 통한 데이터 검증
반응형