繁体
此刻,除了林鸿,亚瑟和
修都疲惫不堪,直接倒在床上呼呼大睡。
在
行过十几次不断地来回调试和传输程序的过程之后,亚瑟的俄罗斯游戏终于顺利地在ti-82上运行了!
亚瑟之前在学习编程的时候,曾经独立开发过这个游戏,有现成的源代码,移植起来的难度并不大。
三人商量了一下,最终决定将俄罗斯方块这个游戏移植到计算
中。
于是,亚瑟又开始对游戏的源程序
行修改…
修第一时间将计算
抢了过来,然后开始玩了起来。
林鸿正是
心设计好了一个小程序,然后将其编译成机
码,先是向他找到的那个栈中压
一些无效的数据,
确计算这些数据的长度,等达到一定长度之后,再将他设计好的数据给压
去,让其发生溢
,覆盖缓冲区之外的区域,这样当固件系统运行到这里的时候,就会成功地调用执行他的这个程序…
俄罗斯方块是苏联科学家阿列克谢*帕基特诺夫一个经典游戏,它看似简单但却变化无穷,令人上瘾。1988年在
国上市之后,立刻获得了
大的商业成功,受到了男女老少所有人的
迎,成为一款极为经典的大众游戏,没有任何一款游戏能够与其媲
。
刚开始的几次运行都
了
问题,但是这是很正常的情况,移植到另外一个平台,如果能一次
就成功,那就太夸张了,就算是再
的程序员,有时候也是会犯一些低级错误的,例如变量名称写错,忘记写分号之类的,这是很正常的情况。只要
据调试信息,有针对
地
行修改就行了。
立刻想要看一下破解之后的成果,可是接下来难题又来了——没有合适的可以运行在上面的
件。
亚瑟的这个俄罗斯方块程序是用c语言
行编写的,林鸿来
国之后才开始接
这门编程语言,用得还不是很熟,今天看到亚瑟不断修改调试,也学到了不少东西。
这个过程,说起来看似简单,实际上却是经过林鸿无数次测试才找到的,为了
确计算栈的长度,他至少反反复复重复了五十遍以上的数据压
过程,而为了能够让自己的这个程序能够顺利接
固件的运行
程,其中所
费的时间和
力,也是无法三言两语描述得清楚的。
修在玩了一会儿就发现,由于计算
显示屏
度太低,很容易就会被撑到
,最终挂掉。
第一百三十九章栈缓冲区溢
,到网址
于是,他们又将阵地转移到了林鸿房间,因为他这台机
可以模拟z80cpu的运行环境,将亚瑟之前编写的那个源程序
行简单的修改和优化之后,就将其编译成为了一个可在计算
里面执行的文件,然后通过数据线传输到了计算
存储空间中。
玩俄罗斯方块游戏,只需要至多五个
键就可以,三个方向键,一个键用来变换,另外一个键则用来加速。而计算
上有几十个
键,足够了。
在将近凌晨五
的时候,他们终于将最终版的俄罗斯方块游戏给确定下来。
林鸿将其成功破解之后,兴奋之下,忘记了别人不像自己
本不用睡觉,当时就立刻敲响了亚瑟的房门,幸好他们刚刚睡下不久,听到他这么快就将计算
给破击
来了,原本已经瞌睡得睁不开
睛的两人顿时
神一振,将睡意抛到了九霄云外。
两个人的意见不能统一,时间就在他们不断地争辩中
逝,结果什么东西都没
来。
这个时候,
修提
,先编写一个相对比较简单的游戏跑起来再说,得到了林鸿和亚瑟的一致认可。
于是,这个严密的堡垒便被林鸿给成功攻克了。
这天早晨的晨练,亚瑟和
修都没能去,只有林鸿一人。
在整个过程中,林后都没再
手,他只是在旁边观看着亚瑟编写程序。
是程序的一个bug,但是当向这些栈中压
经过
行设计的数据,就不仅仅是bug了,而是成为了可供黑客利用的漏
。
现在机
已经
来了,却没有合适的
件,真是够郁闷的。
他发现,亚瑟编写程序的时候,有一些细小的编程习惯值得借鉴和学习,例如在关键的地方给
注释、给代码语句多分行缩
,提
代码的可读
…等等。
第一百三十九章栈缓冲区溢
编写程序就是这样,调试、运行、再调试…
不断地和各
错误和bug
这斗争,直到最终顺利通过的那一刻!
之前他们两个讨论了很久,始终无法确定第一个
件该编写什么功能。亚瑟比较倾向于
一个实用
的
件,例如可以辅助学生在学校的学习,而
修则倾向于编写一个有意思的游戏。
于是,他提
了改
意见,将显示方式向顺时针方向旋转90度,这样方块下落的路程就可以大大加长,可以降低难度。