+ -
当前位置:首页 → 问答吧 → debug中l命令的疑问

debug中l命令的疑问

时间:2011-08-21

来源:互联网

l address driver firstrecoder number
这是l命令的用法
当没有参数时,默认加载进的内存起始地址为cs:100(资料上这么说的)
但是当我使用这种方法的时候,却始终跟这不一样。加载进的地址为ds:100
程序代码:
assume cs:code
code segment
mov ax,20h
mov ds,ax
mov bx,0
mov ax,0
mov cx,0ffH
s: mov [bx],ax
inc bx
inc ax
loop s
mov ax,4c00H
int 21H
code ends
end
编译链接完成后,生成test.exe文件。

在debug中执行如下语句:
=======================
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B25 ES=0B25 SS=0B25 CS=0B25 IP=0100 NV UP EI PL NZ NA PO NC
0B25:0100 4D DEC BP
-r ds;修改ds中的值
DS 0B25
:0b24
-r cs;修改cs中的值
CS 0B25
:0b26
-r 修改cx中的值,即载入3f个字节
CX 0000
:3f
-r
AX=0000 BX=0000 CX=003F DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B24 ES=0B25 SS=0B25 CS=0B26 IP=0100 NV UP EI PL NZ NA PO NC
0B26:0100 43 INC BX
;设置好后的结果如上。
-ntest.exe
-r
AX=0000 BX=0000 CX=003F DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B24 ES=0B25 SS=0B25 CS=0B26 IP=0100 NV UP EI PL NZ NA PO NC
0B26:0100 43 INC BX
-l
-u cs:100
0B92:0100 E83200 CALL 0135
0B92:0103 7312 JNB 0117
0B92:0105 83C703 ADD DI,+03
0B92:0108 FEC8 DEC AL
0B92:010A 75F1 JNZ 00FD
0B92:010C 2E CS:
0B92:010D C706B2900800 MOV WORD PTR [90B2],0008
0B92:0113 B4FF MOV AH,FF
0B92:0115 EB14 JMP 012B
0B92:0117 26 ES:
0B92:0118 8A65FF MOV AH,[DI-01]
0B92:011B B002 MOV AL,02
0B92:011D 26 ES:
0B92:011E 8B15 MOV DX,[DI]

-r
AX=0000 BX=0000 CX=0019 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B82 ES=0B82 SS=0B92 CS=0B92 IP=0000 NV UP EI PL NZ NA PO NC
0B92:0000 B82000 MOV AX,0020
-u ds:100
0B82:0100 B82000 MOV AX,0020
0B82:0103 8ED8 MOV DS,AX
0B82:0105 BB0000 MOV BX,0000
0B82:0108 B80000 MOV AX,0000
0B82:010B B9FF00 MOV CX,00FF
0B82:010E 8907 MOV [BX],AX
0B82:0110 43 INC BX
0B82:0111 40 INC AX
0B82:0112 E2FA LOOP 010E
0B82:0114 B8004C MOV AX,4C00
0B82:0117 CD21 INT 21
0B82:0119 0000 ADD [BX+SI],AL
0B82:011B B9FF00 MOV CX,00FF
0B82:011E 8907 MOV [BX],AX

在这我有两个疑问:
1、为什么默认加载的内在地址是ds:100而不是资料中的cs:100
2、一开始没有加载文件时,寄存器段的内容都一样,而加载后,为什么会改变呢?且四个都改变了
不仅如此,内容加载到了新指向的地址,而没有加载到旧的地址上,又是为什么啊?不解
===========================================

-n test.exe
-l 0b23:0
  ^ Error
-l cs:110
  ^ Error
-l ds:100
  ^ Error
-l cs:100
-u cs:100
0B92:0100 E83200 CALL 0135
0B92:0103 7312 JNB 0117
0B92:0105 83C703 ADD DI,+03
0B92:0108 FEC8 DEC AL
0B92:010A 75F1 JNZ 00FD
0B92:010C 2E CS:
0B92:010D C706B2900800 MOV WORD PTR [90B2],0008
0B92:0113 B4FF MOV AH,FF
0B92:0115 EB14 JMP 012B
0B92:0117 26 ES:
0B92:0118 8A65FF MOV AH,[DI-01]
0B92:011B B002 MOV AL,02
0B92:011D 26 ES:
0B92:011E 8B15 MOV DX,[DI]
========================================
上面看到,我用带有address参数的l命令,
是我写的参数不正确,还是什么原因。求解释一下,大虾们!

作者: No_Crack   发布时间: 2011-08-21

刚想到了一点,数据是存在了CS:0处,所以用DS:100刚好也指向了这个地方。所以有这样的结果。
但是,不是默认地是存在ds:100处吗,即使用了l cs:100也是存在了cs:0处呢?

作者: No_Crack   发布时间: 2011-08-21

1、资料有错
2、你加载的是EXE文件,加载EXE文件DEBUG要自动处理很多事,因此寄存器会变,你加载一个非EXE文件就知道有什么不同了

作者: Areslee   发布时间: 2011-08-21