1、栈的几个概念:
-先进后出。
-在内存中表现为从高地址往低地址增长。
-栈顶:栈的最上方(低地址区)。
-栈低:栈的最下方(高地址区)。
2、EIP、EBP和ESP
EIP:函数的返回地址;存储着下一条指令的地址,每执行一条指令,该寄存器变化一次。
ESP:栈顶;
EBP:栈底;我们可以通过栈底地址和偏移相加减来获取变量地址。
对栈溢出进行攻击的手段:1、使用libc库中system函数的地址覆盖掉原本的返回地址,也就是EIP;这样原函数返回的时候会转而调用system函数。2、设置system函数返回后的地址,以及为system函数构造我们预定的参数,这样就可以使用任意的参数调用内存中任意的库函数。