매직 넘버와 IHDR 청크의 위치 (주소)를 찾는 방법

1. 매직 넘버 주소:

매직 넘버는 일반적으로 파일의 가장 처음 (offset 0) 에 위치합니다. 예외적인 경우가 있을 수 있지만, 대부분의 파일 형식은 파일 시작 부분에 매직 넘버를 배치하여 파일 형식을 빠르게 식별할 수 있도록 합니다.

2. IHDR 청크 주소 (PNG 파일):

PNG 파일에서 IHDR 청크는 매직 넘버 바로 뒤에 위치합니다. PNG 파일 구조는 다음과 같습니다.

[PNG 매직 넘버 (8 bytes)] [IHDR 청크 (13 + 4 + 4 = 21 bytes 이상)] [다른 청크들...]

따라서 IHDR 청크의 주소는 다음과 같이 계산할 수 있습니다.

  • IHDR 청크 시작 주소: PNG 매직 넘버의 길이 (8 바이트)

예시:

PNG 파일을 예시로 들어 설명하겠습니다.

  1. PNG 매직 넘버 (8 bytes): 89 50 4E 47 0D 0A 1A 0A (주소 0x00 ~ 0x07)
  2. IHDR 청크:
    • IHDR 청크 시작 주소: 0x08 (PNG 매직 넘버 바로 뒤)
    • IHDR 청크 길이: 최소 21바이트 (Length (4) + Chunk Type (4) + Chunk Data (13) + CRC (4))

코드 예시 (Python):

def find_png_ihdr_address(file_path):
    """PNG 파일에서 IHDR 청크의 주소를 찾습니다."""

    with open(file_path, "rb") as f:
        header = f.read(8)
        if header == b'\x89PNG\r\n\x1a\n':
            ihdr_address = 8  # PNG 매직 넘버 다음
            print(f"IHDR 청크 주소: 0x{ihdr_address:02X}") # 16진수 형태로 출력
            return ihdr_address
        else:
            print("PNG 파일이 아닙니다.")
            return None

# 사용 예시
ihdr_address = find_png_ihdr_address("example.png")
if ihdr_address is not None:
    print("IHDR 청크를 찾았습니다.")

다른 파일 형식:

다른 파일 형식에서는 매직 넘버 이후 특정 데이터 구조의 주소를 찾는 것이 더 복잡할 수 있습니다. 각 파일 형식의 스펙 문서를 참조하여 데이터 구조의 위치를 파악해야 합니다. 일반적으로 파일 헤더에는 파일 구조에 대한 정보가 포함되어 있으며, 이를 활용하여 원하는 데이터의 주소를 계산할 수 있습니다.