pwn-简单栈溢出

因为调用子函数之前会保存返回地址和ebp以及传参

顺序从小地址到大地址依次是ebp,retuen_addr,参数i,...

32位和64位传参方式不相同 

32位直接把所有参数接在retuen_addr后面

64位先依次放入rdi, rsi, rdx, rcx, r8, r9,如果还有多余的参数才接到retuen_addr后面

一般来说得到溢出点的偏移距离有两个方法

第一:IDA F5后每个变量都提供了相对ebp,esp的偏移地址

第二:读入函数调用前需要用到读入的首地址,那么就一定放进某个寄存器里,根据目前地址和ebp可以计算出偏移地址

之后先覆盖ebp,再覆盖retuen_addr就可以改变程序的运行方向了

原文地址:https://www.cnblogs.com/lxy8584099/p/11819296.html