-
Reordering(재배치)표튜터와 함께하는 Pwnable/Pwnable 개념 및 정리 2019. 2. 20. 22:52
스택을 확인하다가 분명히 먼저선언되어있는 변수인데도 불구하고 자꾸 낮은 쪽에 쌓이는 현상이 발생했다...
즉, 스택이 변수가 선언되어진 반대의 순서로 쌓였다.
원인을 알아내기위해 많은 삽질을 했고 결국 친구를 통해 알아냈는데 그 이유는 바로 Reordering이라고 한다.
* Thanks to Dongmin *
Reordering이란
재배치라는 의미로 컴파일러가 메모리 접근속도를 향상시키기위해서 진행하는 것으로
최적화를 목적으로 제한된 범위 내에서 프로그램 명령의 위치를 바꾸는 것을 의미한다.
예를 들어 우리가 흔히 볼 수 있는 아주 쉬운 아래와 같은 코드가 있다.
아래는 어셈블리어로 본 소스코드이다.
한 가지 이상한점이 있다. 먼저 선언되어 스택에 쌓이면 스택 특성상 높은 곳부터 쌓여야 하는데
위의 그림을 보면 가장 먼저 들어간 1이라는 값이 제일 낮은 곳에 순서대로 쌓여있다.
이러한 현상이 일어나는 이유가 바로 위에서 설명한 재배치 Reordering이다.
같은 코드인데 Reordering이 발생하지 않은 것과 비교해보자
어셈블리어 코드만 봐도 바로 다르다는 걸 알 수 있다.
우리가 알던대로 변수가 선언된 순서대로 높은 주소의 스택에 차곡차곡 쌓이는 것을 확인할 수 있었다.
난또.. 컴퓨터가 잘못된줄 알았다.. 그럴일이 없는데.. 괜히ㅋㅋ
역시 컴퓨터는 거짓말을 안한다ㅋㅋ
참조 : https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B0%B0%EB%A6%AC%EC%96%B4
반응형'표튜터와 함께하는 Pwnable > Pwnable 개념 및 정리' 카테고리의 다른 글
/proc 디렉토리 관련 정리 (0) 2019.02.19 PIC란 (0) 2019.02.17 정적라이브러리와 동적라이브러리로 컴파일하기 (0) 2019.02.17 Mitigation의 종류 (0) 2019.02.15 GDB 사용 시 set 명령어 (0) 2019.02.15 댓글