exploit을 진행할 때 간혹 잘못된 것이 없는데도 segmentation fault가 발생하는 경우가 있다.
이 때에는 stack alignment를 의심해 봐야 한다.
함수 실행 전에 rsp가 16의 배수로 존재해야 한다.
함수를 실행시킬 때에는 일반적으로 call 명령어를 통해서 호출하는데, 이 경우에는 return address를 stack에 push한 후에 rip를 옮겨주기 때문에 call 전에 rsp + 8의 값이 16의 배수여야 한다.
반대로, jmp만을 통해서 함수를 호출하는 경우에는 따로 push해 주지 않으므로 그냥 rsp가 16의 배수이기만 하면 된다.
어셈블리 명령어 상에서는 movaps 명령어가 stack이 align되어 있는지 확인하는 명령어다.
이 명령어가 모든 함수에는 들어있지는 않다.
일단 지금까지는 system, __isoc99_scanf 함수에 movaps가 있는 것을 확인하였다.