참고 도서 : [리버싱 핵심원리 : 악성 코드 분석가의 리버싱 이야기]
저자 : 이승원
출판사 : 인사이트
참고 사이트 :
Endianness
엔디언 (Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻한다. 바이트를 배열하는 방법을 특히 바이트 순서(Byte Order)라 한다.
엔디언은 보통 큰 단위가 앞에 나오는 빅 엔디언(Big-Endian)과 작은 단위가 앞에 나오는 리틀 엔디언(Little-Endian)으로 나눌 수 있다. 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디언(Middle-Endian)이라 부르기도 한다.
Byte Order
바이트 순서는 크게 빅 엔디언과 리틀 엔디언으로 나눌 수 있다. 빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방법이고, 리틀 엔디언은 반대로 작은 단위의 바이트가 앞에 오는 방법이다.
종류 |
0x1234 |
0x12345678 |
빅 엔디언 |
12 34 |
12 34 56 78 |
리틀 엔디언 |
34 12 |
78 56 34 12 |
미들 엔디언 |
- |
34 12 78 56 또는 56 78 12 34 |
예외적으로 str 문자열의 경우 Endian 형식에 상관없이 동일하다. 문자열은 결국 캐릭터 (char) 배열이기 때문에 각 바이트를 하나씩 연속해서 저장한다고 생각해보면 리틀 엔디언에서도 문자열 자체는 빅 엔디언과 동일한 순서로 저장되는 것이다.
오늘날 x86 아키텍처를 사용하는 대부분의 데스크톱 컴퓨터는 리틀 엔디언을 쓰며 이를 '인텔 포멧'이라 한다. 거꾸로 네트워크에서는 주소를 빅 엔디언으로 쓰는데 이의 영향으로 많은 프로토콜과 몇몇 파일 포맷이 빅 엔디언을 사용하고 있다. 따라서 애플리케이션 개발에 사용된 데이터를 네트워크로 송수신할 때 엔디언 타입을 변경해 주어야 한다.
댓글