바이트 오더링(Byte Ordering) : 데이터를 저장하는 방식
- 빅 엔디언(Big Endian)
- 리틀 엔디언(Little Endian)
BYTE b = 0x12;
WORD w = 0x1234;
DWORD dw = 0x12345678;
char str[] = "abcde";
TYPE | Name | SIZE | 빅 엔디언 Style | 리틀 엔디언 Style |
BYTE | b | 1 | [12] | [12] |
WORD | w | 2 | [12][34] | [34][12] |
DWORD | dw | 4 | [12][34][56][78] | [78][56][34][12] |
char [] | str | 6 | [61][62][63][64][65][00] | [61][62][63][64][65][00] |
바이트 타입의 b 변수를 저장할 때는 두 방식의 차이가 없지만, 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타난다.
빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장한다.
리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장한다. 하지만 str 문자열은 Endian 형식에 상관없이 동일하다. 그 이유는 문자열이란 결국 캐릭터(char) 배열이기 때문에 각 바이트를 하나씩 연속으로 저장한다고 생각하면 리틀 엔디언에서도 문자열 자체는 빅 엔디언과 동일한 순서로 저장되는 것이다.
빅 엔디언 & 리틀 엔디언
빅 엔디언은 대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용된다. 또한 네트워크 프로토콜에 빅 엔디언이 사용된다.
반면, Intel x86 CPU에서는 리틀 엔디언을 사용한다. 리틀 엔디언 방식은 산술 연산과 데이터의 타입이 확장/축소될 때 더 효율적이다.
'Reversing' 카테고리의 다른 글
반디집 API 후킹 (0) | 2024.07.30 |
---|---|
memcpy 분석 (0) | 2024.07.09 |