엔디안이란 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻함
이러한 엔디안은 3가지로 분류하고있다.
빅엔디안, 리틀엔디안, 미들엔디안
간단히 설명하자면 큰 단위가 앞에 나오는 빅 엔디안과 작은 단위가 앞에 나오는 리틀엔디언이 있는데 이 두 경우에 속하지 않거나 둘을 모두 지워너하는것을 미들엔디언이라고 한다.
조금 이해하기 쉽게 말하면
빅엔디안은 최상위 바이트부터 차례로 저장하는 방식이며, 리틀엔디안은 최하위 바이트부터 차례대로 저장하는 방식이다.
예를들어
10101100 이라는 2진수가 있다면 이를 빅엔디안형식으로 저장을 하면
10101100 이 되고 리틀엔디안 형식으로 저장을 하면
00110101 이렇게 반대로 뒤집어져 저장되는것을 알 수 있다.
이렇게 뒤집혔다고 값이 달라진것은 아니다 읽는 방법도 다르기 때문이다.
리틀엔디안의 경우 읽을때도 다시 뒤집어 읽는다.
그러나 1바이트씩 출력한다면??
1010 1100 은 10진수 10 , 12이다.
빅엔디안형식으로 저장된 상태를 그대로 1바이트씩 읽어도 결과는 같다.
그러나 리틀엔디안은 다르다.
0011 0101 이렇게 1바이트씩 읽게되면 1바이트씩 뒤집어 읽기때문에 12, 10 이렇게 순서가 바뀐다.
그래서 예를 들어 메모리 4바이트에 16진수 12345678을 저장하게 되면 올리디버거에서는 1바이트씩 나누어 출력해주기때문에
메모리창에 78 56 34 12 이렇게 출력되는것을 볼 수 있다.(보통 인텔cpu가 리틀엔디안방식을 이용한다.)
'Study > reversing' 카테고리의 다른 글
리버싱에 대해 알아보자 (0) | 2017.08.19 |
---|---|
리턴코드 분석 (0) | 2017.06.16 |
어셈블리어 기본명령어 (0) | 2017.04.11 |
어셈블리어, 주소에 접근하기 (0) | 2017.04.04 |
어셈블리어의 시작과 기본문법 (0) | 2017.03.30 |