2016. 10. 27. 02:51ㆍ2018년 이전글/역공학
바이트 오더링이란?
데이터를 저장하는 방식을 일컫는 말이다. 크게 빅엔디언과 리틀엔디언으로 나눈다. 그러면 빅엔디언과 리틀엔디언 의 차이점에 관하여 알아보도록 해보자.
BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde";
|
[코드 1] 빅엔디언&리틀엔디언 비교
TYPE | NAME | SIZE | 빅엔디언 | 리틀엔디언 |
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] |
[표 1] 빅엔디언&리틀엔디언 비교
바이트 타입으로 변수를 저장할때에는 두 표기방법에 차이가 보이지 않는다. 하지만 2바이트를 넘어갈때부터 두 표기법에 차이가 보인다. 빅엔디언의 경우 매우 직관적으로 볼수 있도록 표기를 하고 리틀엔디언의 경우 반대로 읽어나가게 끔 저장이 된다. 그런데 배열에서는 각각의 char타입으로 저장되기 때문에 그 순서가 동일하다.
자, 아주 간략하게 리틀엔디언과 빅엔디언에 관하여 알아보았다. 그러면 궁금함점이 생긴다. 직관적으로 확인할 수 있어 편리한 빅엔디언만을 쓰지 않고 왜 리틀엔디언 또한 사용할까? 알아보도록하자.
리틀엔디언 & 빅엔디언 장단점
빅 엔디언
소프트웨어의 디버그를 편하게 해주는 경향이 있다. --> 직관적으로 볼 수 있기 때문에
리틀 엔디언
산술연산과 데이터의 타입이 확장/축소될 때 더 효율적이라는 장점이 있다.
메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요없다.
ex>0x2A 리틀엔디언: 2A 00 00 00 --> 앞의 두바이트나 한바이트만 떼어 낸다면 하위 16비트나 8비트를 바로 얻음
But!!!! 빅엔디언 환경에서는 변수 주소에 2바이트나 3바이트를 더해야한다.
'2018년 이전글 > 역공학' 카테고리의 다른 글
[리버싱 핵심원리]1부 5장_스택 (0) | 2016.11.02 |
---|---|
[리버싱 핵심원리]1부 4장_IA-32 Register 기본 설명 (0) | 2016.10.27 |
[리버싱 핵심원리]1부 2장_Hello Reversing! (0) | 2016.10.25 |