본문 바로가기
Study/리버싱

Endianness

by 꼬부기가우는소리 2016. 6. 8.
728x90


참고 도서 : [리버싱 핵심원리 : 악성 코드 분석가의 리버싱 이야기]

저자 : 이승원

출판사 : 인사이트


참고 사이트 : 

- [위키 백과] 엔디언



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 아키텍처를 사용하는 대부분의 데스크톱 컴퓨터는 리틀 엔디언을 쓰며 이를 '인텔 포멧'이라 한다. 거꾸로 네트워크에서는 주소를 빅 엔디언으로 쓰는데 이의 영향으로 많은 프로토콜과 몇몇 파일 포맷이 빅 엔디언을 사용하고 있다. 따라서 애플리케이션 개발에 사용된 데이터를 네트워크로 송수신할 때 엔디언 타입을 변경해 주어야 한다.




'Study > 리버싱' 카테고리의 다른 글

Stack  (0) 2016.06.12
Register  (1) 2016.06.08
Stub Code  (0) 2016.06.08
OllyDbg (1)  (0) 2016.06.05
Assembler  (0) 2016.06.05

댓글