반응형




안녕들 하시죠 !


오늘은 컴퓨터 메모리를 저장하는 방식 ( 바이트 오더링 ) 에 대해 알아보겠습니다.


앞으로 리버싱 공부를 하는데 기초가 되는 중요한 부분이라고 합니다.

학교다닐때 컴퓨터 구조 시간에 배웠던 내용인데 하나도 기억이 안나서 다시 공부해보려고 합니다.


바이트 오더링에는 크게 두가지 방식이 있는데요.

빅 엔디언리틀 엔디언 입니다.

우리가 앞으로 자주 사용할 방식은 리틀 엔디언 이라고 합니다.


아래에 간단한 예제를 통해 빅 엔디언 과 리틀 엔디언의 차이를 알아보려고 합니다.


BYTE b    =            0x12;

WORD w    =         0x1234;

DWORD dw    =    0x12345678;

char str[]    =       "abcde";


첫번째 줄을 보시면 타입은 BYTE, 이름은 b, 사이즈는 1, 빅 엔디언 = [12], 리틀 엔디언 = [12] 로 표현됩니다.

여기에선 차이가 없지만 2바이트 이상을 표현할때 부터 달라집니다.


두번째 줄을 보시면 타입은 WORD, 이름은 w, 사이즈는 2, 빅 엔디언 = [12][34], 리틀 엔디언 = [34][12] 로 표현됩니다.

빅 엔디언 방식은 데이터를 사람이 앞에서부터 글을 읽는 방식으로 저장합니다.

리틀 엔디언 방식은 데이터를 역순으로 저장합니다. 저장되는 바이트의 순서가 뒤집어져 있는 것 입니다.


네번째 줄의 str 문자열은 엔디언 형식에 관계 없이 저장 순서가 동일한데요. 

문자열이란 char 배열이기 때문에 각 바이트를 하나씩 연속해서 저장해 나가기 때문입니다.

빅 엔디언 과 리틀 엔디언 둘 다 [61][62][63][64][65][00] 으로 저장이 되는데 맨 뒤에있는 [00]은 문자열의 마지막에 항상 들어가는 NULL값 입니다.

( 아스키 문자 ' a ' 는 0x61, ' e '는 0x65 입니다. )


빅 엔디언은 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 메모리 값을 보기 편하고, 소프트웨어의 디버그를 편하게 해 주는 경향이 있습니다.

리틀 엔디언은 Intel x86 CPU에서 사용하는 방식이고 산술 연산과 데이터의 타입이 확장/축소될 때 더 효율적인 장점이 있습니다.


오늘은 여기까지입니다 감사합니다 !


 


참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p49~52

+ Recent posts