반응형
IntelHex Python 모듈을 활용한 HEX & BIN 파일 검증 방법
🔍 개요
펌웨어 개발 및 마이크로컨트롤러 프로그래밍을 하다 보면 HEX 파일과 BIN 파일을 다룰 일이 많습니다. 이 파일들이 올바른 형식인지, 데이터 구조에 문제가 없는지 검증하는 과정은 매우 중요합니다.
이 글에서는:
- HEX 파일과 BIN 파일의 차이점
- IntelHex Python 모듈을 사용한 HEX 파일 검증 방법
- 파일 내 데이터 구조 문제 확인 및 해결 방법
을 초보자도 쉽게 이해할 수 있도록 정리해 보겠습니다.
1️⃣ HEX 파일과 BIN 파일이란?
파일 형식 | 설명 | 특징 |
HEX 파일 | 인텔 HEX 포맷의 텍스트 기반 파일 | ASCII로 저장되며, 주소, 데이터, 체크섬 포함 |
BIN 파일 | 순수한 바이너리 데이터 | 메모리 덤프 그대로 저장, 구조적 정보 없음 |
💡 HEX 파일은 사람이 읽을 수 있는 ASCII 형식으로 구성된 반면, BIN 파일은 순수한 바이너리 데이터이므로 직접 읽을 수 없습니다.
📂 HEX 파일과 BIN 파일을 확인하는 방법
- HEX 파일 확인
- 메모장, VS Code 등의 텍스트 편집기로 열어 확인 가능
- 헥사 에디터(HxD, Notepad++) 사용하면 가독성이 높아짐
- IntelHex 모듈로 데이터 구조 확인 가능
- 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 모듈을 사용한 파일 분석 방법을 알아보았습니다.
💡 정리
- HEX 파일과 BIN 파일 차이점 이해
- IntelHex 모듈을 활용한 파일 검증
- 파일 내 데이터 구조 확인 및 해결 방법
- HEX ↔ BIN 변환을 통한 데이터 검증
반응형
'코딩취미 > Python' 카테고리의 다른 글
PySide6에서 findChildren()을 활용하는 방법 (0) | 2025.02.23 |
---|---|
PySide6에서 QWidget 내부 GroupBox 접근 및 조작 방법 (0) | 2025.02.23 |
PySide6: QVBoxLayout 내부의 QGroupBox 너비 확인하기 (0) | 2025.02.22 |
PySide6에서 여러 개의 QLabel 스타일 일괄 설정하기 (0) | 2025.02.22 |
PySide6에서 QLabel 스타일 변경 및 Sunken 효과 적용하기 (0) | 2025.02.22 |