*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 冰的热度
*/ 时间: 2007-9-17 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
一年前在网上搜到一个号称是世界第一高手的程序,前些天又在本论坛搜到,
很多网友都说看不懂,觉的挺难的,其实这个程序并不是深不可测,
我可以给大家简单解读一下程序的意思.
虽然原程序可以在本论坛搜到,但为了方便大家,我会以回贴的形式给出.
其实他是用机器语言写的,除了结尾,主程序中都是 0--f 组成,也就是 16 进制数,
大家可以看到程序左边竖着一列都是以 e 开头的,如 e100 ,这表示地址,
应该是基地址(CS)和偏移地址(IP)的和.
以第一行为例:e100后面的33 f6 bf 0 20 b5 10 f3 a5 8c c8 5 0 2 50 68 13 1 cb e 1f be a1 1 bf 0 1
就是这个"段"中的指令,至于什么是"段",在这不再详述,
每一组16进制数代表着特定的意义,如 mov bx 2200H 的机器指令是 BB0022
每一组占一个字节,大家数一数,第一行有多少字节,对是27个字节,
所以第二行的起始地址是 e11b,以此类推.
至于具体的每一句的意思,大家有了一定的汇编语言经验,就会知道了,
因为在DOS中用debug命令可以看到汇编指令对应的机器指令,
如刚才说的mov bx 2200H 的机器指令是 BB0022
************************************************************************
//更新
再说程序最后,
g
rcx
fff
n1.com
w
q
g是debug的命令,执行代码的意思,如果没有g,则command只将程序读入内存,而不执行,
至于什么是command,可以去我的贴子<<深入讲解main()返回值问题>>
rcx也是debug 的命令,rcx fff意思是修改cx的内容为fff
注意不要把n1.com看成一个文件名,其实 n 是debug的一个命令,,1.com 才是文件名,
n的意思是指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数
q是degug的命令,退出的意思,
现在大家是不是基本知道这个程序的意思或结构了?
**********************************************************************************
**********************************************************************************
更正:
我在描述中有很多错误和漏洞,
在描述中,我说 e100是表示地址,其实不对,正却解释如下:
e 是 debug 的一个命令,是写入内存的意思,100 是偏移地址,
而不是我说的基址+偏移地址.
在这里他没有给出基址,也就是取默认的ds中的值.
授人以鱼不如授人以渔,
虽然我已经把这些机器码全部翻译成汇编指令,
但是我不打算贴上来,我可以告诉大家获得汇编指令的方式
用debug命令的U命令就可.你可以看到上面每一句机器码与汇编指令的对应关系还有内存位置,
更详细的讲解恐怕今天不能给出了,忙呀......
敬请继续关注......
**********************************************************************************
[此贴子已经被作者于2007-9-29 21:12:59编辑过]