打个比方来说,往堆中存数据,就好像是往一个大盘子里放弹珠,不管哪一颗弹珠先放入盘中,都不会影响其它弹珠的出盘动作。而栈呢,就像是往一根只有一个孔的钢管中塞弹珠,后进去的弹珠会把先进的退路堵上,前面的弹珠要出来,就必须让后面的先出去才行。”
洛凡看了看下面鸦雀无声的同学,觉得自己讲的应该更加生动些,于是问了个问题:“为什么听上去栈比堆的使用要困难很多,可栈还有很多人去使用它呢?”
下面的同学听了他的解释,心中也确实认为堆比栈要好,正为此疑惑不解,所以都回问道:“为什么呢?”声音之整齐,让一旁的教授怀疑会不会产生共振导致教学楼倒塌,吓得他的眼睛不停瞄向教室四壁。
“这个就要从堆栈在操作系统中的应用方式来说了。堆在内存中存储的地址不是连续的,可以分散开利用内存间不同段的细小空间,而栈则必须要使用一块连续的空间,这块空间的大小也必须事先规定好。栈由系统自动分配,速度较快,但程序员是无法控制的,堆则不同,它是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来很方便……”说了一段理论,下面的同学又开始走神了,虽然还在努力的听着,但很多人已经显得不耐烦了。
于是洛凡又举了个例子道:“使用栈就像是我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度很小,不能在美女面前显现出自己超强的厨艺。而使用堆就象是自己亲手动手做喜欢吃的菜肴,比较麻烦,但是做出来的菜不但合自己的胃口,更能够在心仪的人面前炫耀一番,赢得她的夸赞……”
“哦!”下面的同学听了这个比喻,顿时恍然的点起头来,觉得这才听得懂了,刚才的理论实在是乏味难记,又不好理解,只听一下就完全失去兴趣了,还是这样有意思。这时,讲台下也不知是谁大声的问了个问题:“远程溢出攻击要如何防范呢?”
洛凡听到这个问题,一下子觉得不太好回答,溢出攻击多半是利用程序在堆栈空间上的限制不严进行的,要想防范还真不是件简单的事情。旁边的教授听到这个问题,也是为洛凡捏了把汗,怕他回答不出来。
洛凡思索了一会,这才开口说:“要做到防范溢出攻击,其实很简单的一个方法就是在写程序的时候严格分配检查内存大小,不留下让入侵者利用的空间。但是我们日常使用的程序都是别人写好的,内存分配这些根本就不是我们可以控制的到的。面对这样的情况,我们就必须利用防火墙来进行防范,把一切重复可疑的数据包全部拦截下来,甚至包括那些隐蔽扫描的数据包,也要拦截掉。”
“竟然是隐蔽扫描,又如何能拦截掉它呢?”
“其实所谓的隐蔽扫描,就是发送一个不全的数据包给目标,然后通过回应数据包来分析目标的情况。这些不全的数据包就好比是一些烂苹果,防火墙就比是质检部门,在烂苹果被人买回家之前,都回被他们处理掉。这样一来,这些有问题的苹果不能到达消费者手上了,也就达不到害人的目的了。”
洛凡从容的解答着,说道网络安全方面,这可是他的强项,解释起来游刃有余,比喻生动形象,让人一听就懂。这全靠他平时为了强化长江一号的自动入侵能力,在网络安全方面下的苦功夫。在网络安全领域,最厉害的安全专家同时也是最厉害的黑客。
天才一秒记住御宅屋1234(yzw1234.com)
御宅屋自由小说阅读网