독되C-1
Endian과 메모리
int a = 0x0011223344;
여기서 0x는 16진수를 나타내는 접두사이다.
int b = 012;
여기서 012는 접두사 0으로 인해 8진수로 인식되며, b에는 십진수 10이 할당된다.
바이트 순서는 크게 빅 엔디언과 리틀 엔디언으로 나눌 수 있다.
빅 엔디언은 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방법이고,
리틀 엔디언은 반대로 작은 단위의 바이트가 앞에 오는 방법이다.
안타깝게도 Intel에서 little-endian을 채택한다...
이러한 엔디언은 debug를 위해서, 또한 network작업을 위해서 꼭 필요한 상식이다.

위와 같은 코드를 디버그해보자.(4번줄 클릭후 f5).

아직 a에는 값이 할당되어있지 않은 상태이다. 아마 쓰레기값일 것이다.
f10을 눌러서 한 줄 더 디버그해보자.

little-endian방식으로 메모리에 저장되어 있는 것을 확인할 수 있다.
만약 int a = 0x01234567; 이라면, 아래와 같이 메모리에 저장된다.

강의에서 신기한 점을 배울 수 있다.

분명 위의 상황에서는 a의 메모리에 little-endian 형식으로 값이 알맞게 들어있다.
그런데 만약 메모리를 내가 직접 타이핑해서 바꾸면 어떻게 될까?

코드는 분명히 int a = 0x1234567; 이라고 되어있지만, 메모리상으로는 0x11223344로 입려되어있고,
실제로 출력도 0x11223344로 출력된다.
이게 해킹이란다.... 처음 알았다.
나중에 프로그램이 멈췄을 때, 프로그램을 살려야 할 경우에는 직접 메모리값을 조작하면 안죽고 돌아가게 만들 수 있다.

