[리버싱 핵심원리]1부 3장_리틀 엔디언 표기법

2016. 10. 27. 02:512018년 이전글/역공학

바이트 오더링이란?

데이터를 저장하는 방식을 일컫는 말이다. 크게 빅엔디언과 리틀엔디언으로 나눈다. 그러면 빅엔디언과 리틀엔디언 의 차이점에 관하여 알아보도록 해보자.


   

   BYTE b        = 0x12;

   WORD w      = 0x1234;

   DWORD dw  = 0x12345678;

   char str[]       = "abcde";

  

[코드 1] 빅엔디언&리틀엔디언 비교

 TYPE 

 NAME

 SIZE 

 빅엔디언 

 리틀엔디언

 BYTE

[12] [12] 

 WORD

[12][34] 

[34][12] 

 DWORD

dw 

[12][34][56][78] 

[78][56][34][12] 

 char

str 

[61][62][63][64][65][00]

[61][62][63][64][65][00] 

[표 1] 빅엔디언&리틀엔디언 비교


바이트 타입으로 변수를 저장할때에는 두 표기방법에 차이가 보이지 않는다. 하지만 2바이트를 넘어갈때부터 두 표기법에 차이가 보인다. 빅엔디언의 경우 매우 직관적으로 볼수 있도록 표기를 하고 리틀엔디언의 경우 반대로 읽어나가게 끔 저장이 된다. 그런데 배열에서는 각각의 char타입으로 저장되기 때문에 그 순서가 동일하다.


자, 아주 간략하게 리틀엔디언과 빅엔디언에 관하여 알아보았다. 그러면 궁금함점이 생긴다. 직관적으로 확인할 수 있어 편리한 빅엔디언만을 쓰지 않고 왜 리틀엔디언 또한 사용할까? 알아보도록하자.


리틀엔디언 & 빅엔디언 장단점


빅 엔디언

  • 소프트웨어의 디버그를 편하게 해주는 경향이 있다. --> 직관적으로 볼 수 있기 때문에

리틀 엔디언

  • 산술연산과 데이터의 타입이 확장/축소될 때 더 효율적이라는 장점이 있다.

  • 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요없다.

ex>0x2A    리틀엔디언: 2A 00 00 00 --> 앞의 두바이트나 한바이트만 떼어 낸다면 하위 16비트나 8비트를 바로 얻음

     But!!!!   빅엔디언 환경에서는 변수 주소에 2바이트나 3바이트를 더해야한다.