[April , 12, 2008] 汇编语言作业的作弊方法 本文程序和工具

ah                    		汇编语言作业的作弊方式

    帮着朋友写汇编语言作业(好像从小到大我经常帮别人写作业),前后花了一个星期,没写出来。感觉很糟糕,

出题老师疯了,居然要求学生用汇编语言写学生成绩管理系统。要求“能够实现菜单显示、菜单选择、编辑(录入、

插入、修改、删除等)、查找、显示、求总成绩、按总成绩排序(高→低)并显示、装入数据文件、数据文件存盘、

退出、为数据动态分配存储空间等功能”。这样的要求仿佛是给学生火柴棍和502胶水,要求制作能装人的船----

理论上完全能实现,实际上可行性不高。

    既然没写出来,自然要琢磨“歪门邪道”。方法就是用C语言直接写出功能。编译之后有2条路可以选择:

1.反编译为汇编语言;2.插入在汇编语言中。

    花了大约4个小时编写了简单的C语言程序,用TC3正常编译,生成 xy.exe 再使用 exe2bin 生成 xy.com文件。

不清楚什么地方的问题,最开始使用TCC -mt -lt xy.c 可以直接编译为 xy.com 文件。选择生成 com文件的原因是

它没有段切换的问题,使用非常方便,也足够小。

    xy.com的大小是18,576byte,一般来说汇编程序的源程序大小是它生成的机器代码的7-8倍。反过来估计,

如果手写汇编,完成这些功能就需要大约 140000byte 的源程序... ...这就是我说出题老师疯了的原因......

    使用IDA 5反编译,结果太难看懂了,估计老师一眼就能看出来“代码不是人写的”。顺便提一句:IDA5的功能

好强大,反编译后直接能够生成程序的流程图(接近);使用IDA4 反编译了一下,结果也过于复杂,整理起来非常

困难。

    看起来想直接反出来汇编程序这条路走不通。

    第二条路,用汇编程序包括这个文件,这个是名副其实的“作弊”,不过看起来更专业。我想如果有汇编语言老师

能看到我的这个文章,并且发现有同学用我这个方法,不妨放他们一马吧,你的题目太难了能理解/想到这个方法的人

就是对汇编认识很深刻的了。

    具体方法,用工具 bin2inc 将 xy.com 转化为 x.inc,然后将程序写成这个样子:

.model tiny

;为了表示你是一个认真的同学,这里可以插入宏

.data

;为了表示你是一个专业的同学,这里可以插入数据定义

.code

;为了表示你不想让老师一眼看出问题的同学,这里可以插入过程

.startup

	include x.inc

;为了表示你写了很多,这里可以插入代码

.exit

end

    实际上,程序的关键只有 include x.inc 这句话。

    交作业的时候,需要交上上面的程序和x.inc 。

    最后的话,我将东西做完,交给朋友。朋友没同意,觉得 x.inc 太难解释清楚。后来不得不再花了十几个小时给他

写纯汇编语言的作业。未来如果有一个以生成汇编语言代码为目标的简单C编译器,中国学生的汇编语言作业将不会是

什么难题。

                                                                                          Zoologist
                                                                                          2008-4-12

    

发表评论

电子邮件地址不会被公开。 必填项已用*标注