본문 바로가기
리버스 코드 엔지니어링

[리버스 엔지니어링] 바이트 오더링

by 손정빈 2018. 10. 31.
728x90
반응형

컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미하는 바이트 오더링의 리틀 엔디언 표기법과 빅엔디언 표기법에 대해서 알아보겠습니다.

 

우선 바이트 오더링이란?

  • 데이터가 바이트 단위로 메모리에 저장되는 순서를 의미하며 CPU 벤더 의존적인 특징을 가지고 있다.

 

바이트 오더링의 종류에는 크게 리틀 엔디엔 표기법과 엔디언 표기법이 존재합니다.


그림를 보시면 쉽게 이해하실수 있으실겁니다.

 

바이트 타입의 변수에 저장할 경우 방식의 차이는 없습니다. 하지만 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타납니다. 엔디언 방식은 데이터를 저장할 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장합니다. 그러나 리틀 엔디엔 방식은 데이터를 저장할 역순으로 저장하는 것입니다.

 

리틀 엔디언과 엔디언의 장점

엔디언

  • 소프트웨어의 디버기를 편하게 해주는 경향이 있습니다. 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 디버깅 과정에서 메모리의 값을 보기 편하게 출력 해줍니다.

리틀 엔디언

  • 메모리에 저장된 값의 하위 바이트들만 사용할 별도의 계산이 필요 없다는 장점이 존재합니다.
  • 산술 연산과 데이터의 타입이 확장/축소 효율적이라는 장점이 존재합니다.

정확히 저 또한 이해를 한 내용은 아니지만 예를 들어 0x04가 존재하다면 이 수를 계산하기 위해선
빅엔디언 일 경우 00 00 00 04 << 즉 00 00 00의 주소를 뛰어넘는 과정이 필요합니다.
하지만 리틀엔디언의 경우 04 00 00 00 이기에 바로 04를 가져와 계산을 할 수 있는 것이죠.

또한 확장/축소면에서도 리틀 엔디언의 경우 확장/축소을 뒤 주소에서 하기에 더욱 편하다는 것 같습니다.

 


그리고 각 엔디언의 사용은 

엔디언의 경우 네트워크에서 주로 사용되며, 리틀 엔디언의 경우 Intel 계열 프로세서에서 사용하는 바이트 오더입니다.


반응형

댓글