Did you know that you can navigate the posts by swiping left and right?
본 글은 이승원이 집필한 「리버싱 핵심원리」 를 읽고 공부(정리)한 내용을 바탕으로 쓰여졌습니다.
컴퓨터(CPU)에서 메모리에 데이터를 저장하는 방식.
리틀 엔디언(Little Endian)과 빅 엔디언(Big Endian)이 있다. 빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방법이고, 리틀 엔디언은 반대로 작은 단위의 바이트가 앞에 오는 방법이다.1
4바이트짜리 자료형 DWORD에 0x12345678 이란 값이 저장되어 있다고 가정해보자. 그럴 때, 빅 엔디언에서는 [12][34][56][78]의 순서대로 메모리에 들어간다. 그러나 리틀 엔디언의 경우에는 1바이트씩 [78][56][34][12]의 순서대로 메모리에 들어간다.
단, 배열의 경우에는 둘다 똑같이 순서대로 빅엔디언처럼 저장된다. 배열의 특성 때문이 아닐까..
리틀 엔디언은 Intel x86 아키텍처에서 사용되며 오늘날의 대부분 개인용 컴퓨터에서 사용된다. (이를 인텔 포멧이라고 한다.) 반면에 빅 엔디언은 네트워크의 많은 프로토콜에서 사용되며 Unix 서버용 RISC 계열의 CPU나 ARM 프로세서(핸드폰에 쓰는 CPU, AP라고 한다)에서도 사용된다.
빅 엔디언은 사람이 보기에 직관적이라는 장점이 있다. 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 디버깅 과정에서 메모리의 값을 보기 편하다. 반면에 리틀 엔디언은 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 있다. 또한 가산기의 설계가 단순해진다는 장점이 있다.