ELF .data 섹션에는 어떤 형태로 데이터가 들어갈까?

edward·2025년 10월 16일

.data 섹션은 단순한 바이트 배열일 뿐입니다.
즉, 이 영역 안에는 데이터의 타입이나 이름, 크기 정보가 전혀 포함되지 않습니다.


예시: 정수 데이터 저장

예를 들어 다음과 같은 코드가 있다고 해봅시다:

int x = 0x11223344;

이 변수의 초기값은 ELF의 .data 섹션에 그대로 저장됩니다.

메모리 오프셋내용(16진수)의미
0x0044 33 22 11int x = 0x11223344; (리틀 엔디안 기준)

즉, 타입 정보 없이 순수한 바이트 나열입니다.


심볼 테이블의 역할

이렇게 단순히 저장된 데이터는 링킹(linking) 과정에서
심볼 테이블(Symbol Table) 의 도움을 받아 의미를 얻게 됩니다.

항목역할
심볼 이름 (st_name)변수나 함수의 이름 (x, printf, 등)
주소 / 오프셋 (st_value)해당 데이터가 메모리상 어디에 위치하는지
크기 (st_size)몇 바이트짜리 데이터인지
타입 정보 (st_info)함수, 변수, 섹션 등 어떤 종류의 심볼인지

즉, .data 섹션의 “의미 없는 바이트 덩어리”들은
심볼 테이블을 통해 “이 바이트들이 변수 x의 값이다”라는 의미를 얻게 되는 거예요.


요약

ELF의 .data 섹션은
단순히 초기화된 전역/정적 변수의 값들의 바이트 배열 을 담는 공간이며,
데이터의 이름, 타입, 크기 등의 의미는 심볼 테이블을 통해 해석된다.

profile
there ain't no shortcuts

0개의 댓글