. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
主题 : :  王爽《汇编语言》第2版实验16的分析过程  [待解决] 回复[ 0次 ]   点击[ 465次 ]  
chinaljg
[帖 主] [ 发表时间:2011-02-10 15:18 ] 
荣誉值:10
信誉值:0
注册日期:2011-01-04 11:04
王爽《汇编语言》第2版实验16的分析过程
问题的关键是:
找到子程序在中断例程中的入口地址
-r

AX=0000  BX=0000  CX=00F3  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000  
DS=13D3  ES=13D3  SS=13E3  CS=13E3  IP=0000   NV UP EI PL NZ NA PO NC 
13E3:0000 8CC8          MOV        AX,CS                              
-n sy16set.exe

-g28


AX=0000  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=00F2  DI=02C5  
DS=13E3  ES=0000  SS=13E3  CS=13E3  IP=0028   NV UP EI PL NZ NA PO NC 
13E3:0028 B8004C        MOV        AX,4C00                            
-d13e3:0

13E3:0000  8C C8 8E D8 BE 2D 00 B8-00 00 8E C0 BF 00 02 B9   .....-..........
13E3:0010  C5 00 FC F3 A4 B8 00 00-8E C0 26 C7 06 F0 01 00   ..........&.....
13E3:0020  02 26 C7 06 F2 01 00 00-B8 00 4C CD 21 EB 08 59   .&........L.!..Y
13E3:0030  00 74 00 94 00 B8 00 50-53 80 FC 03 77 18 8A DC   .t.....PS...w...
13E3:0040  B7 00 03 DB 81 C3 02 02-2E 8B 1F 81 C3 02 02 B9   ................
13E3:0050  2F 00 2B D9 FF D3 5B 58-CF 53 51 06 BB 00 B8 8E   /.+...[X.SQ.....
13E3:0060  C3 BB 00 00 B9 D0 07 26-C6 07 20 83 C3 02 E2 F7   .......&.. .....
13E3:0070  07 59 5B C3 50 53 51 06-BB 00 B8 8E C3 BB 01 00   .Y[.PSQ.........

中断未安装时:
table在安装程序中的起始地址:002FH
子程序在安装程序中的起始地址:
sub1=13E3:002FH 占2个字节
sub2=13E3:0031H 占2个字节
sub3=13E3:0033H 占2个字节
sub4=13E3:0035H 占2个字节
子程序在安装程序中的入口地址:
(sub1)=0059H
(sub2)=0074H
(sub3)=0094H
(sub4)=00B8H
中断安装后,直接调用子程序的入口地址肯定是错误的.
关键就是如何找到子程序正确的入口地址?
我们来看一看安装中断例程后的情况:
-d0:200

0000:0200  EB 08 59 00 74 00 94 00-B8 00 50 53 80 FC 03 77   ..Y.t.....PS...w
0000:0210  18 8A DC B7 00 03 DB 81-C3 02 02 2E 8B 1F 81 C3   ................
0000:0220  02 02 B9 2F 00 2B D9 FF-D3 5B 58 CF 53 51 06 BB   .../.+...[X.SQ..
0000:0230  00 B8 8E C3 BB 00 00 B9-D0 07 26 C6 07 20 83 C3   ..........&.. ..
0000:0240  02 E2 F7 07 59 5B C3 50-53 51 06 BB 00 B8 8E C3   ....Y[.PSQ......
0000:0250  BB 01 00 B9 D0 07 26 80-27 F8 26 08 07 83 C3 02   ......&.'.&.....
0000:0260  E2 F4 07 59 5B 58 C3 50-53 51 06 BB 00 B8 8E C3   ...Y[X.PSQ......
0000:0270  B1 04 D2 E0 BB 01 00 B9-D0 07 26 80 27 8F 26 08   ..........&.'.&.
table的起始地址发生了变化:
table在中断例程中的起始地址为:0000:0202H
子程序在中断例程中的起始地址:
sub1=0000:0202H 占2个字节
sub2=0000:0204H 占2个字节
sub3=0000:0206H 占2个字节
sub4=0000:0208H 占2个字节
子程序在中断例程中的入口地址:
(sub1)=0000:022CH
(sub2)=0000:0247H
(sub3)=0000:0267H
(sub4)=0000:028BH
以sub1为例:原来是0059H,现在是022CH
如何计算呢?
0059H+202H-002FH=022CH
其中:0059H是sub1未安装时的入口地址
202H是安装中断后,table的起始地址
002FH是安装中断前,table的起始地址
022CH是安装中断后,sub1的入口地址
其它三个子程序同理。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved