汇编语言作业的作弊方法 本文程序和工具
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