<리틀엔디안, 빅엔디안>
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계열의 프로세서에서 사용하는 바이트 오더이다.
'보안 공부 > Reversing' 카테고리의 다른 글
[리버싱] 왜 스택은 높은 주소에서 낮은 주소로 채워질까? (0) | 2019.11.01 |
---|---|
[리버싱] 스택 프레임과 함수 프롤로그/에필로그 (0) | 2019.11.01 |
[리버싱] CMP와 TEST 명령어 차이 (0) | 2019.11.01 |
[리버싱] MOV와 LEA의 차이 (5) | 2019.09.17 |
[리버싱] 어셈블리 명령어 종류 (0) | 2019.09.17 |
댓글