栈中压入数据栈顶指针地址变小
pop数据栈顶指针地址变大
也就是说栈底指针地址大于栈顶地址
EIP:扩展指令指针。在调用函数时,这个指针被存储在栈中,用于后面的使用。在函数返回时,这个被存储的地址被用于决定下一个将被执行的指令的地址。
ESP:扩展栈指针。这个寄存器指向栈顶的当前位置,并允许通过使用push和pop操纵或者直接的指针操作来对栈中的内容进行添加和移除。
EBP:扩展基指针。这个寄存器在函数的执行过程中通常是保持不变的。它作为一个静态指针使用,用于指向基本栈的信息,例如,使用了偏移量的函数的数据和变量。这个指针通常指向函数使用栈底部。
栈溢出:
变量越界占用了存放EIP(拓展指令指针)(存放函数返回后,下一步指令的地址)导致寻址错误。
char 1B
int 4B
EBP 4B
EIP(返回地址) 4B
栈溢出的利用:
通过在存在栈溢出的部位植入恶意地址覆盖EIP指针的地址部分,来绕过程序的判断,跳转到成功的条件分支。
网友评论