⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 db17.htm

📁 debug编程的教程
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0050)file://\\Server\pub\Hacker\Documents\JM\jm1-01.txt -->
<HTML><HEAD>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR></HEAD>
<BODY><XMP>1.OCW1
    位元7~0 = 分别表示IRQx是否启动,0表示允能(enable),1表示
               禁能(disable)。
说明∶本命令也就是设定岔断的罩遮值(IMR,Interrupt Mask Register)。
      在使用时,通常先读取原值後,再设置所要处理的岔断所对应的位
      元,以避免影响到其他岔断。

2.OCW2
    位元7~5 = 000 取消自动EOI时旋转优先权模式
               001 不特别指定IRQx方式结束岔断
               010 无作用
               011 指定IRQx方式结束岔断
               100 设定自动EOI时旋转优先权模式
               101 不特别指定IRQx结束岔断时旋转优先权
               110 设定优先权
               111 指定IRQx结束岔断时旋转优先权
    位元4~3 = 固定为0
    位元2~0 = 指定的IRQx
说明∶本命令是用来指定岔断优先权的处理方式(请参阅相关书籍),以
      及指示岔断是否处理完毕。一般在PC上大都使用20h做不特别指定
      IRQx方式来结束8259的岔断。所谓不特别指定IRQx方式,指的是要
      处理的IRQ编号并不由位元2~0来指定,而以目前已发生且优先权
      最高的岔断为准。

3.OCW3
    位元7    = 固定为0
    位元6~5 = 0x 无作用
               10 取消特殊罩值(reset special mask)
               11 设定特殊罩值(set special mask)
    位元4    = 固定为0
    位元3    = 固定为1
    位元2    = 0表使用岔断方式服务
               1表不使用岔断方式服务(poll command)
    位元1~0 = 0x 无作用
               10 读取岔断需求暂存器(IRR)
               11 读取内部服务暂存器(ISR)
说明∶特殊罩值功能,主要是提供给需要任意改变岔断的禁能、允能,而
      又不希望因未送出EOI命令,而导致其他较低优先权的岔断无法发
      生的程式使用。当设定了特殊罩值後,则每次在OCW1重设罩值时,
      均会将所有未被罩遮掉的IRQ重新启用。IRR及ISR这两个暂存器的
      值可用来辨别各岔断的产生与否。IRR(Interrupt Request
      Register)记录了硬体已产生岔断需求,但8259尚未发出岔断讯号
      或CPU尚未回应确认讯号的岔断;ISR(Interrupt Service Register)
      则记录了CPU已接收到岔断讯号但处理程式尚未回应EOI命令的岔断。
      当要读取这两个暂存器值时,首先必须送出OCW3指定所要读取的暂
      存器,然後再由相同的输出入埠将之读取。
备注∶不使用岔断服务的方式(poll command),依8259之零件说明为RD
      讯号会读取Priority Level值,其值意义如下∶
          位元7    = 1表有岔断发生
          位元6~3 = 保留
          位元2~0 = 岔断发生的编号
      又说明Poll Command是使用在8259的岔断输出讯号不使用,或CPU
      线路已将岔断讯号输入禁能的情况。据作者实际测试结果,在PC上
      将OCW3修改成Poll Command形态,并不影响到原岔断的执行,读取
      而得的值也并非Priority Level的值。至於为何如此,作者遍寻相
      关书籍,也问过许多硬体设计从业人员,竟找不到答案。作者猜测
      可能是因PC CPU仍然接收并使用8259的岔断输出讯号,使得8259的
      岔断确认讯号并非由Poll Command的RD讯号确认所致,至於真正原
      因,则不得而知了。

    当8259重新初始化後,IMR的值均会重设为FFh(也就是允许所有的岔
断产生),并取消特殊罩值功能。因此当我们要重新初始化8259时,必须
记录原来的IMR值,并在初始化後将之设回,以免初始化後某些原已被禁
能的岔断再次产生而发生问题。当然,初始化後视情况也必须重新设定
OCW3的值。

    上述所有命令字组在PC上均透过I/O Port 20h、21h(第一个8259)
和A0h、A1h(第二个8259)来读写。I/O Port 20h和A0h做为ICW1、OCW2
和OCW3命令的输入,以及IRR、ISR暂存器值的输出。I/O Port 21h和A1h
则做为ICW2、ICW3、ICW4和OCW1命令的输入,以及IMR暂存器值的输出。
至於8259是如何去分辨送来的是那个命令字组,这倒不必我们费心,因为
这些命令字组中大都已安排好某些位元均固定为0或1。由这些固定位元,
8259便能轻易地辨别出所输入的命令种类。以下是目前在PC/AT中两个8259
所处理的16个硬体岔断内容∶

                 ┌ IRQ0 计时岔断
                 ┃ IRQ1 键盘岔断
                 ┃ IRQ2 串接第二个8259
    第一个8259 ━┤ IRQ3 次串列通讯埠(COM2)
                 ┃ IRQ4 主串列通讯埠(COM1)
                 ┃ IRQ5 印表机岔断(LPT2)
                 ┃ IRQ6 软碟岔断
                 └ IRQ7 印表机岔断(LPT1)
                 ┌ IRQ0 即时时脉岔断
                 ┃ IRQ1 保留
                 ┃ IRQ2 保留
    第二个8259 ━┤ IRQ3 保留
                 ┃ IRQ4 保留
                 ┃ IRQ5 数学处理单元岔断
                 ┃ IRQ6 硬碟岔断
                 └ IRQ7 保留

以下为各岔断在本附录中所对应的硬体说明∶

    计时岔断         = 8253、8254
    键盘岔断         = 8042、8255
    即时时脉岔断     = 146818
    数学处理单元岔断 = 8087、80287


解魔武王 追踪过程
C:\DKS>DEBUG DKS.EXE   (284965 BYTE 免解压缩)
-U BFF0
1052:BFF0 E8FF76        CALL    36F2
1052:BFF3 E69A          OUT     9A,AL
1052:BFF5 F3            REPZ
1052:BFF6 0BE3          OR      SP,BX
1052:BFF8 3F            AAS
1052:BFF9 83C414        ADD     SP,+14
1052:BFFC 48            DEC     AX
1052:BFFD 8946D4        MOV     [BP-2C],AX
1052:C000 8B46D4        MOV     AX,[BP-2C]     <---正确密码存放位址
1052:C003 3B46EE        CMP     AX,[BP-12]     <---比较输入密码
1052:C006 7523          JNZ     C02B           <---若不同 就跳到 C02B
1052:C008 68            DB      68
1052:C009 B004          MOV     AL,04
1052:C00B FF366822      PUSH    [2268]
1052:C00F FF366622      PUSH    [2266]
1052:C013 6A            DB      6A
1052:C014 006A01        ADD     [BP+SI+01],CH
1052:C017 8B46EC        MOV     AX,[BP-14]
1052:C01A 05E2FF        ADD     AX,FFE2
1052:C01D 50            PUSH    AX
1052:C01E FF76EA        PUSH    [BP-16]
1052:C021 9ACF19143B    CALL    3B14:19CF
1052:C026 83C40E        ADD     SP,+0E
1052:C029 EB2D          JMP     C058
1052:C02B 68            DB      68
1052:C02C B004          MOV     AL,04
1052:C02E FF366822      PUSH    [2268]
1052:C032 FF366622      PUSH    [2266]
1052:C036 6A            DB      6A
1052:C037 006A07        ADD     [BP+SI+07],CH
1052:C03A 8B46EC        MOV     AX,[BP-14]
1052:C03D 05E2FF        ADD     AX,FFE2
1052:C040 50            PUSH    AX

破解这套GAME只需掌握一些技巧 可揽INT 16 AH=00 即可顺利找到判断点的地方 如上图所
示的程式码 本人不想解释上面的程式作用 若不懂指令运作方式 可参考坊间的组合语言书
籍即可。



</XMP></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -