通过虚拟机的追踪功能,非常直观地看到了这个程序的所有动作,先罗杰斯教授的程序在遍历内存地址的时候,它在内存单元中就现了两
身不一样的程序。
因为日本学生的程序没有什么危险,欧洲学生设计的“哨兵”代码触了罗杰斯教授的攻击指令,所以,它率先对欧洲学生的程序起了攻击。
为什么罗杰斯教授的程序会先会攻击欧洲学生的程序呢?
原因就出在欧洲学生程序代码的“哨兵”身上。
哨兵,顾名思义,就是起到站岗、放哨、警戒的作用,罗杰斯教授的程序在遍历内存单元时,当它移动到欧洲学生程序所在的内存地址时,该区段的数据必然会产生变化,“哨兵”代码向程序本体送警报,提示有敌来袭。
当然,“哨兵”代码只是起到提示、警报作用,它本身并没有攻击作用,这就像打仗的时候,敌军空袭,自己基地里拉响的防空警报。
当然,通过防空警报知道敌人的空军来轰炸基地了,然后可以根据基地自身的防御情况,可以决定是逃跑还是反击。
“哨兵”向程序本体提醒自己所在的内存地址数据生了变化,根据程序员的设计,它会选择是移动内存单元躲避还是通过数据块轰炸。
很显然,欧洲学生的程序执行的动作是反击!
人家都打到你的地盘来了,你还能无动于衷,坐视不理?看来这个欧洲学生是个反压迫的好战分子。
其实很多时候,从程序代码的编写可以看出一个人的性格,有的程序员会在编写程序的时候留下一些连他自己都不知道小细节。比如有的人喜欢用跳转指令,他会在程序里设计无数跳转指令,跳呀跳呀的,整得像个迷宫似的;有的程序员还有一些怪癣,他甚至在编写程序的时候喜欢将自己的名字或爱人的名字到代码中。
言归正传,罗杰斯教授的程序已经开始轰炸欧洲学生的程序了,人家的程序当然不会坐以待毙,于是它开始动反击了!
不是有话说得好吗?哪里有压迫,哪里就有反抗嘛。
罗杰斯教授的程序执行的是dat数据区段大范围轰炸,它可以一次性对多个内存单元进行轰炸,在这样强烈的攻击下,就算欧洲学生的程序虽然可以移动到下一个内存单元,但是在罗杰斯教授的程序大范围的轰炸下,它就显得有点脆弱了。
不过狗急了尚且跳墙,兔子逼急了还咬人呢。
在罗杰斯教授的程序开始对数据区段轰炸的时候,欧洲学生的程序在内存单元连续复制,不过他的程序刚复制完移动到下一个内存单元时,很遗憾的就会被罗杰斯教授的程序轰炸掉,但是这个程序的复制度非常快,它总是能在被轰炸之前将自己成功复制,然后跳转到下一个内存单元,由此可以见,这个程序的生命力确实顽强。
终于,经过多次连续复制后,欧洲学生的程序终于跳出罗杰斯教授的轰炸数据区段,现在,它开始反攻了。
跳转后,这个程序也执行了轰炸指令,第一次,在a区段的c、5坐标,罗杰斯教授的程序被轰炸了一次;第二次,在b区段的6区段,罗杰斯教授的程序又被轰炸了一次。
a、b两个区段,罗杰斯的程序都被轰炸过一次,不过令人遗憾,数据轰炸不彻底,罗杰斯教授的程序从这两个坐标中逃了出来。
此后,欧洲学生的程序就再也未能在内存单元中轰炸到罗杰斯教授的程序,想必罗杰斯教授的智能程序启动后,程序的陷阱对它不能起到作用了。
接下来的形势完全呈现一边倒的局面,欧洲学生的程序在内存单元中完全只要躲避的份,根本就没有还手之力。
罗杰斯教授的程序轰炸的数据区段越来越广,模拟的八千个内存单元,它一次性可以轰炸二十个连续的内存单元!
不要小看这二十个连续的内存单元,用于“磁芯大战”的程序,在跳转躲避对手轰炸的时候往往不会过这二十个连续的内存单元。
所以,尽管欧洲学生的程序复制的度也快了很多,但是它的imp程序,目的就是不断把自己移动到下一个内存单元,这些内存单元是连续的,它复制的度再快,也无法逃过罗杰斯的程序对二十个连续单元的轰炸啊。
看来欧洲学生的程序被吃掉迟早是早晚的事。
终于,罗杰斯教授的程序在a区段的一个内存单元将欧洲学生的程序锁定了,然后,狂风暴雨的轰炸开始了。
所有围观看着这个情形都摇了摇头,失望的叹了一口气。