帮忙讲解一下缓冲区溢出!!好吗?

来源:百度知道 编辑:UC知道 时间:2024/05/07 07:17:41
对不起,怪我没说清楚!在缓冲区溢出中其中的jmp ebp 的含义并不是很明确其中的跳转更是令人头疼!可不可以讲一下缓冲区的具体的跳转的原理?通过windows的内部的动态函数库的指令的跳转是什么意思呀?ebp又是什么意思 呀?
细节的问题还是不懂,不过你回答的很全面了呵呵!!

信息安全类的问题! 呵呵!

所谓溢出,就是说超出现有的。

缓冲区溢出分堆栈和堆,两种溢出。

一般局部的缓冲区,都在堆栈中开辟。如,char a[5]; 就在堆栈中
开辟了5个字节的缓冲区,当向a中写值超过5个字节是就造成了栈缓冲区的溢出。 堆栈在程序运行中起到至关重要的作用,各个函数之间的调用关系都存在堆栈中,如果缓冲区a溢出足够长,并且覆盖了
某个函数的返回地址,这就会改变程序的既有流程,达到执行任意代码的作用,后果是非常严重的,被溢出的计算机可能会被远程黑客所控制。

这就使大概的缓冲区溢出的概念。

哦 是这样!我想你应该明白ret指令吧,ret指令的意思是
pop eip;jmp eip这两句的结合。如果我们把缓冲区溢出并且覆盖了
函数的返回地址,那么在执行ret时,就会把覆盖的内容,pop到eip中,那么在jmp eip就会掉转到我们要执行的任意位置,而此时注意esp指向的空间是缓冲区中覆盖点的后面,所以要在系统dll中找到一个jmp esp的语句,这样就可以跳转到覆盖返回地址点的后面,我们在这里放置我们的代码,这样在缓冲区溢出后就可以执行任意的代码了!