728x90
반응형
컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미하는 바이트 오더링의 리틀 엔디언 표기법과 빅엔디언 표기법에 대해서 알아보겠습니다.
우선 바이트 오더링이란?
- 데이터가 바이트 단위로 메모리에 저장되는 순서를 의미하며 각 CPU 벤더 의존적인 특징을 가지고 있다.
바이트 오더링의 종류에는 크게 리틀 엔디엔 표기법과 빅 엔디언 표기법이 존재합니다.
위 그림를 보시면 쉽게 이해하실수 있으실겁니다.
바이트 타입의 변수에 저장할 경우 두 방식의 차이는 없습니다. 하지만 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타납니다. 빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장합니다. 그러나 리틀 엔디엔 방식은 데이터를 저장할 때 역순으로 저장하는 것입니다.
리틀 엔디언과 빅 엔디언의 장점
빅 엔디언
- 소프트웨어의 디버기를 편하게 해주는 경향이 있습니다. 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 디버깅 과정에서 메모리의 값을 보기 편하게 출력 해줍니다.
리틀 엔디언
- 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 존재합니다.
- 산술 연산과 데이터의 타입이 확장/축소 될 때 더 효율적이라는 장점이 존재합니다.
정확히 저 또한 이해를 한 내용은 아니지만 예를 들어 0x04가 존재하다면 이 수를 계산하기 위해선
빅엔디언 일 경우 00 00 00 04 << 즉 00 00 00의 주소를 뛰어넘는 과정이 필요합니다.
하지만 리틀엔디언의 경우 04 00 00 00 이기에 바로 04를 가져와 계산을 할 수 있는 것이죠.
또한 확장/축소면에서도 리틀 엔디언의 경우 확장/축소을 뒤 주소에서 하기에 더욱 편하다는 것 같습니다.
그리고 각 엔디언의 사용은
빅 엔디언의 경우 네트워크에서 주로 사용되며, 리틀 엔디언의 경우 Intel 계열 프로세서에서 사용하는 바이트 오더입니다.
반응형
'리버스 코드 엔지니어링' 카테고리의 다른 글
[리버스 엔지니어링] 함수 호출 규약 정리 (0) | 2018.11.14 |
---|---|
[리버스 엔지니어링] CPU 레지스터 (0) | 2018.11.14 |
[리버스 엔지니어링] OllyDbg 간단한 사용법 (0) | 2018.10.30 |
[리버스 엔지니어링] 리버스 엔지니어링이란? (0) | 2018.10.30 |
댓글