본문 바로가기
reversing

바이트 오더링

by 코끼리_땃쥐 2022. 11. 3.
반응형

바이트 오더링은 데이털르 저장하는 방식을 말하는 것이라고 생각하면 되는데, 이는 애플리케이션의 디버깅을 할 때 알아두어야 하는 기본 개념 중 하나입니다. 바이트 오더링 방식에는 크게 두가지가 있습니다. 바로 빅 엔디언(Big Endian)과 리틀 엔디언(Little Endian) 방식입니다.

BYTE   b      = 0x12;
WORD   w      = 0x1234;
DWORD  dw     = 0x12345678;
char   str[]  = "abcde";

총 4개의 (크기가 다른) 자료형이 있습니다. 각 엔디언 방식에 따라서 같은 데이터를 각각 어떤식으로 저장하는지 비교해보겠습니다.

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]

바이트(BYTE) 타입의 변수 b 변수를 저장할 때는 두 방식의 차이가 없습니다. 하지만 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타납니다. 빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장합니다. 하지만 리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장합니다. 즉 저장되는 바이트의 순서가 뒤집어져 있습니다.(표에서 w와 dw에 저장된 값을 비교해보기 바랍니다.)

 

리틀 엔디언 이라고 할지라도 바이트 자체는 정상적인 순서로 저장이됩니다.

오로지 2바이트 혹은 4바이트 자료형과 같이 멀티바이트(multi_bytes)인 경우 각 바이트가 역순으로 저장되는 것 입니다. 또한 str문자열은 Endian 형식에 상관없이 동일합니다. 그 이유는 문자열이란 결국 캐릭터(char) 배열이기 때문에 각바이트를 하나씩 연속해서 저장한다고 생각해보면 리틀 엔디언에서도 문자열 자체는 빅 엔디언과 동일한 순서로 저장되는것입니다.

 

리틀 엔디언 & 빅 엔디언

데이터를 순서대로 저장시키는 빅 엔디언의 장점은 사람이 보기에 직관적이라는 것입니다. 빅 엔디언은 대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용됩니다. 또한 네트워크 프로토콜에 빅 엔디언이 사용됩니다. 이 사실은 x86계열의 응용 프로그램 개발자와 리버서에게 중요한 의미를 가지고 있습니다. 애플리케이션 개발에 사용된 데이터를 네트워크로 송수신할 때 엔디언 타입을 변경해야 하기 때문입니다.

데이터를 역순으로 저장시키는 리틀 엔디언 방식이 산술 연산과 데이터의 타입이 확장/축소될 때 더 효율적이라는 장점을 가지고 있습니다.

반응형

'reversing' 카테고리의 다른 글

IMAGE_FILE_HEADER - OPTINAL_HEADER  (0) 2022.11.29
PE File Format 구조  (0) 2022.11.25
고급 안티 디버깅  (0) 2022.10.20
안티 디버깅 Dynamic  (1) 2022.10.05
안티 디버깅 Static  (2) 2022.10.04

댓글