본문 바로가기

Reversing

Byte Ordering

바이트 오더링(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