发信人: dragegg() 
整理人: aollen(1999-08-10 17:26:59), 站内信件
 | 
 
 
在报纸上曾得到一个解决DOS的版本不兼容的方法:
      C:\PAHT\DEBUG.COM PROGRAM
      由 R 指令可得寄存器 BX 与 CX 的数值,
      使用(S [BX] [CX] B4 30)语句可得到一个或多个[DS:IP]数值;
      对得到的[DS:IP]进行反汇编;可找到以下的类似句子:
              DS:IP  B430       MOV AH,30
              DS:IP  CD21       INT 21
              DS:IP  3Dxxxx     CMP AX,XXXX  <- XXXX为版本号,如1E03是3. 30版
              DS:IP  .....      JZ  XXXX        可自行修改为其他版本.
                                ^^              其中03为主版本,1E为次版 本30
                                或是自己使用A | 的16进制代码.3Dxxxx则比 较AX
                                指令修改条件转| 内的数值是否为031E.
                                移语句.       | 
 
 后来,发现这个方法太麻烦,我就改为这样修改:
              DS:IP  B430       MOV AH,30   <- 改为 MOV AH,XXXX
              DS:IP  CD21       INT 21      <- 改为 NOP
              DS:IP  3Dxxxx     CMP AX,XXXX
              DS:IP  .....      JZ  XXXX
 其中,原理相同.第1种是改条件语句,第2种是改获取版本为放入版本号.
 再后来,用DEBUG实在是辛苦,我就用16进制编辑工具修改:
 查找字串“B4 30 CD 21”,若后面跟着一串“0A 07”(WIN98的DOS版本是7.10)或 是“16 06”(DOS的版本6.22),就把字串“B4 30 CD 21”改为“B8 0A 07 90” (WIN98的程序)或是“B8 16 06 90”(DOS622的程序);有时这样改后反而运行时出 现DOS版本错误的信息时,则应该把“B8 0A 07 90”或“B8 16 06 90”改为“B 8 07 0A 90”或“B8 06 16 90”,后就一定会成功的。
 事实上,这种方法和第2种方法在本质上是一样的。
  -- 或许该改名叫做潮汐了,没钱没时间,也就只能限制在一个月上网一次了。
 欢迎你给我写信,但若想收信则只能请你耐心等候了。
 "路漫漫其修远兮,吾将上下而求索!"
 回复时请CLICK 一下“将本文章寄一份给原作者”后的方框,谢谢
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.184.6]
  | 
 
 
 |