.data 섹션은 단순한 바이트 배열일 뿐입니다.
즉, 이 영역 안에는 데이터의 타입이나 이름, 크기 정보가 전혀 포함되지 않습니다.
예를 들어 다음과 같은 코드가 있다고 해봅시다:
int x = 0x11223344;
이 변수의 초기값은 ELF의 .data 섹션에 그대로 저장됩니다.
| 메모리 오프셋 | 내용(16진수) | 의미 |
|---|---|---|
| 0x00 | 44 33 22 11 | int x = 0x11223344; (리틀 엔디안 기준) |
즉, 타입 정보 없이 순수한 바이트 나열입니다.
이렇게 단순히 저장된 데이터는 링킹(linking) 과정에서
심볼 테이블(Symbol Table) 의 도움을 받아 의미를 얻게 됩니다.
| 항목 | 역할 |
|---|---|
심볼 이름 (st_name) | 변수나 함수의 이름 (x, printf, 등) |
주소 / 오프셋 (st_value) | 해당 데이터가 메모리상 어디에 위치하는지 |
크기 (st_size) | 몇 바이트짜리 데이터인지 |
타입 정보 (st_info) | 함수, 변수, 섹션 등 어떤 종류의 심볼인지 |
즉, .data 섹션의 “의미 없는 바이트 덩어리”들은
심볼 테이블을 통해 “이 바이트들이 변수 x의 값이다”라는 의미를 얻게 되는 거예요.
ELF의
.data섹션은
단순히 초기화된 전역/정적 변수의 값들의 바이트 배열 을 담는 공간이며,
데이터의 이름, 타입, 크기 등의 의미는 심볼 테이블을 통해 해석된다.