c语言栈溢出,c语言栈溢出的原因及解决办法

dfnjsfkhak 32 0

大家好,今天小编关注到一个比较意思的话题,就是关于c语言溢出问题,于是小编就整理了2个相关介绍c语言栈溢出的解答,让我们一起看看吧。

  1. C语言中函数调用为什么会出现栈?
  2. 电脑显示堆栈溢出,怎么解决?

C语言中函数调用什么会出现栈?

是不是调用函数的形参过多?

一般来说,函数的参数都存在栈中,当然也可以申请堆。如果形参过多就会发生栈溢出,用递归的时候发生较多。栈溢出会发生段错误,也就是可能会占用系统的栈(好像不能访问)。。。

c语言栈溢出,c语言栈溢出的原因及解决办法-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

错了给我说……

电脑显示堆栈溢出,怎么解决?

谢邀。

1. 堆溢出和栈溢出都有,不过两者没有关联,一次攻击可以是只有堆溢出也可以只有栈溢出,或者同时,不过大部分情况下一种就足以完成目标了。

c语言栈溢出,c语言栈溢出的原因及解决办法-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

2.以栈溢出为例子,我们知道程序的栈里面是

有上一层子程序的目标地址

的(我记得之前回答你问题的时候提到过所以你应该是知道的),所以在栈里放上一些代码然后把上面提到的这个地址覆盖成一个存着类似于指令的地址,当子程序尝试返回的时候就会被我们引导(劫持)到这句指令上,从而跳进栈里继续执行,执行"我们"的恶意代码。这种存着类似 的地址通常来说在一些系统模块中存在,比如说在xp时代,有一个经典的地址,你现在也能在网上搜到相关信息,这里面就刚好是这句,只要把返回地址覆盖成这个,最终就会执行到栈里。

当然在现时代的操作系统中,堆栈已经不让执行代码了,系统中的地址也都随机化了,进行溢出的难度也今非昔比,上面说的只是一个例子,现在的溢出已经远不能这么简单了。不过魔高一丈,毕竟补丁总是出事了才有,所以仍然有一些技术去绕过这些安全措施,比如说ROP链之类的。

至于所谓已经攻入对方电脑,不是这样的。通常来说这种溢出都是出在一些意想不到的地方的,比如说我构造了一个利用你浏览器图片解析漏洞的图片,这个图片有恶意构造的数据会导致溢出,你只要打开我的网站并且是对应的浏览器,浏览器把这张图存进栈变量,然后因为特殊构造你的栈返回地址就被超长溢出的图片盖住了,然后图片的另一部分是恶意代码,下略…… 同理还有如果某个网站服务器有漏洞,你发一个特殊构造的帖子,他向数据库存储的时候被溢出,下略…… 比如说某个版本的操作系统解析exe图标有漏洞,当你在桌面上看到这个exe的图标的时候,下略……

c语言栈溢出,c语言栈溢出的原因及解决办法-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

3.如果你问的是怎么用这种地址覆盖返回区,如果分析清楚了目标程序的流程,其实是能知道覆盖多长能盖住的,实在不行就写一大堆总有一个能盖住。

至于要溢出多少才能被jmp跳到这个问题,栈溢出的话在栈里放代码然后就得了。也有一些野路子比如说构造巨量的无用指令比如说也就是 然后在后面跟上恶意代码,巨量到占用了进程大部分内存,那么无论被跳到哪里基本上都能被接住,然后执行完这大量的nop就跑到恶意代码了。这种情况有一种类似的操作叫堆喷射,可以搜一下。

到此,以上就是小编对于c语言栈溢出的问题就介绍到这了,希望介绍关于c语言栈溢出的2点解答对大家有用

标签: 溢出 地址 比如说