별빛을담아 |
저도 같은 부분을 공부하는 입장으로써 제가 공부한 내용을 풀자면...
첫번째로 프로그램은 실행할 때마다 실행되는 곳의 주소가 바뀝니다.
그 이유는 Random Stack 기법이라는 Stack Overflow 공격으로부터 보호하기 위한 기술때문일 수도 있구요
모든 컴퓨터가 스펙이 같을 수 없습니다. RAM 사이즈도 컴퓨터마다 다를 수 있고, OS도 다를 수 있고 다른 기타 하드웨어도 모두 같을 수 없으니까요.
이 때문에 OS가 내 프로그램이 올라간 Stack의 위치보다 앞서는가 뒤에 있는가에 따라서 내 프로그램의 위치도 뒤로 밀릴 수도, 앞으로 당겨질 수도 있습니다.
두번째로 지금 질문하신 것 처럼 각 변수 사이에 필요 이상의 공백이 생기는 경우가 있습니다.
이는 일종의 완충재 역할을 하는 부분으로써 변수에 지정된 크기보다 큰 값이 입력된 경우
큰 값 때문에 프로그램이 영향을 받지 않게 하기 위해 이 공백을 생성합니다. 이러한 부분을 dummy라고 부릅니다.
실제로 FTZ를 하면서도 dummy를 많이 접하시게 되는데요. 이 dummy가 받아주지 못할 만큼 더 많이 넣으면
프로그램은 Segmentation Fault(일명 세그폴트!!)를 일으키며 비정상 종료됩니다.
Stack Overflow를 공부하시게 되면 어쩌면 가장 반가우면서도 가장 보기 싫은 애증의 문장이죠 ㅋ |
2013/05/28 |
|