数学建模社区-数学中国

标题: 一张图片引发的血案~!!!!----之浅谈windows内存管理中VC遇到的问题 [打印本页]

作者: wangzheng3056    时间: 2013-7-23 17:46
标题: 一张图片引发的血案~!!!!----之浅谈windows内存管理中VC遇到的问题
本帖最后由 wangzheng3056 于 2013-7-25 10:57 编辑 5 Z& _# \+ n, [0 g$ L1 ], ^
  m) o& P) j1 r2 G
      一年前本人做了一个程序,大概代码中有这么一段
5 c/ Y! W/ q4 d: zvoid function()( [! ~( y+ S/ \9 {/ @# K$ T" K! c
{7 R& B# _8 A) t, y' |+ d
        ……$ q2 h) C& S2 p4 ]+ |
        int  a[400][400];
1 u; w1 t9 A! K3 ~4 B1 Q        ……
4 T2 a3 C0 |& M9 F6 P}
9 M" t, C# V2 n       系统在执行该函数的时候,程序直接崩溃,有时候杀毒软件还出来报错。我经过几番调试使出浑身解数,这个问题还是迟迟不能解决。最终我只有问自己的老师。* D" Y/ e! E- _/ B$ k5 K
        当时我问到我的操作系统老师,他看到我这行程序,一语道破天机,也为我讲了一个非常精彩的故事。
1 D" `; [& s: P" U# P% Y        任何操作系统中都会有自己的内存管理机制,操作系统为进程分配内存时,有两种方式:动态分配与静态分配。  U% C' A, r8 P7 D" N+ U
        静态分配是进程初始化时进行的,语言中静态分配机制通过static方式在语言中实现。例如:static int sum;
$ V+ f& K4 |; e3 T1 d        动态分配在是进程执行过程中,操作系统根据进程的需要自动分配给进程的。
1 }# O% y2 I8 E* N        故事到这里才刚刚开始~!起初windows对于内存分配的很多问题都是采用鸵鸟策略的,但是由于“一张图片引发的血案”微软才不得不重新面对这个问题。
$ p8 k0 v9 t1 b# k& l        JPEG是一个压缩的图片文件,由于不同的文件解码程序是不同的,因此每个文件的内容中都有关于自己图片的解码程序,而且这些程序在解码过程中,操作系统动态为该解码程序分配内存。这时问题就出来了!!!!1 T, i6 M( j3 H7 h4 U' r: y& s, [  ?
        有人在图片自带的解码程序中注入了病毒,并且windows中该解码程序的执行权限是很高的。很多人的电脑莫名其妙的中了病毒,最终发现是jpeg搞得鬼。
( C  U5 b5 x! i8 v* D) b4 z, j) R$ w" V         微软最终限制了进程动态内存分配的最大空间,并且把jpeg解码进程的权限调低,才解决了这个问题。
" v6 F5 x' q: |0 V8 y3 Z        因此我上面的那段程序出了内存溢出的问题。
作者: 一瓢浆糊    时间: 2013-7-23 20:34
哦~多谢版主,又学习了,嘿嘿
作者: clarkCH    时间: 2013-7-24 11:43
赞一个。
作者: 平凡之不凡    时间: 2013-7-30 17:41
赞一个
作者: 邪均佛    时间: 2013-12-31 14:32
不错,赞一个
作者: 邪均佛    时间: 2013-12-31 14:33
不错,赞一
作者: polgageorge    时间: 2014-1-8 22:10
受教,谢谢
作者: 山林隐逸    时间: 2014-8-15 14:47
太赞了~
作者: KOF97    时间: 2014-8-21 22:19
受教了




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5