본문 바로가기
보안 공부/Reversing

[리버싱] 리틀엔디안, 빅엔디안

by 그적 2019. 11. 1.

<리틀엔디안, 빅엔디안>

CPU 종류마다 데이터를 메모리에 저장하는 방법이 다르다.
바이트 오더는 "리틀엔디안", "빅엔디안" 이 두가지 방식으로 저장하는데 여기서 엔디안이란? 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻한다.

먼저 바이트 오더를 말하기에 앞서 바이트를 알고가자.
 1byte = 8bit이며, 1bit는 0과 1로 구성되어 있음을 알것이다.
 1byte는 00000000으로 표현이 가능하고, 4byte인 정수를 표현하면 다음과 같다.

   00000000 00000000 00000000 00000000

 그럼 정수 1이 CPU마다 어떻게 저장되는가(리틀/빅 엔디안)을 예시를 보고 가도록 하자.
 다음을 보면 알 것이다.
빅엔디안 :   00000000 00000000 00000000 00000001
리틀엔디안 :   00000001 00000000 00000000 00000000

빅엔디안 : 높은 주소 ----- 낮은주소         // 사람이 숫자 쓰는 방법과 같이 큰 단위의 바이트가 앞에 온다.
리틀엔디안 : 낮은 주소 ----- 높은주소       // 빅엔디안과 반대로 작은 단위의 바이트가 앞에 온다.

----------------------------------------------------------------------------------------------------------------------------------------------------

바이트 저장방식은 코딩에서 크게 중요하지 않지만!
컴퓨터 간의 네트워크 통신을 할 때 엔디안을 맞추는 작업이 필요하며, 소켓은 기본적으로 빅엔디안을 사용하여 데이터를 송수신할때는 빅엔디안 방식을 사용한다. 이에 따라 Intel계열 CPU는 전달받은 데이터가 빅엔디안 방식임을 인지해야한다. (Network Byte Ordering 변환함수를 사용)


빅 엔디언은 UNIX에서 사용하는 RISC 프로세서에서 사용하는 바이트 오더, 동시에 소켓 프로그래밍에서 중요한 네트워크 바이트 오더, 리틀 엔디언은 Intel계열의 프로세서에서 사용하는 바이트 오더이다.

댓글