함수 에필로그(leaveret) 에 의한 스택 변화
아래 로그는 함수 프롤로그와 에필로그를 거치면서 스택이 어떻게 변하는지를 보여줍니다. ebp가 0xbfffff00 라고 가정하여서 계산을 하였습니다. 결론은 함수 에필로그(leaveret)에 의해 RET가 저장되는 스택의 다음 4바이트가 새로운 RET가 된다는 것입니다. 그래서 이런 특성이 RTL(Return to Libc)이나 연속적인 함수 호출에 이용됩니다.
아래 로그는 함수 프롤로그와 에필로그를 거치면서 스택이 어떻게 변하는지를 보여줍니다. ebp가 0xbfffff00 라고 가정하여서 계산을 하였습니다. 결론은 함수 에필로그(leaveret)에 의해 RET가 저장되는 스택의 다음 4바이트가 새로운 RET가 된다는 것입니다. 그래서 이런 특성이 RTL(Return to Libc)이나 연속적인 함수 호출에 이용됩니다.
크기가 조정되는 배열 스택을 구현해봤습니다. 처음 스택을 생성하여 초기화를 하면 스택의 크기는 0인 상태입니다. 그리고 데이터를 삽입하면 스택의 크기가 확장되고 데이터를 삭제하면 스택의 크기가 축소됩니다. 그런데 매번 삽입, 삭제할 때마다 스택의 크기, 즉 배열의 크기를 조정하면 속도상 비효율적이기 때문에 스택이 가득 차면 2배로 확장하고, 스택이 1/4만 남으면 1/2로 축소되도록 했습니다. 뭐, 이 정도 구현하는 건…