debug中l命令的疑问

[复制链接]
查看11 | 回复4 | 2021-1-27 06:18:27 | 显示全部楼层 |阅读模式
laddressdriverfirstrecodernumber
这是l命令的用法
当没有参数时,默认加载进的内存起始地址为cs:100(资料上这么说的)
但是当我使用这种方法的时候,却始终跟这不一样。加载进的地址为ds:100
程序代码:
assumecs:code
codesegment
movax,20h
movds,ax
movbx,0
movax,0
movcx,0ffH
s:mov[bx],ax
incbx
incax
loops
movax,4c00H
int21H
codeends
end
编译链接完成后,生成test.exe文件。
在debug中执行如下语句:
=======================
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B25ES=0B25SS=0B25CS=0B25IP=0100NVUPEIPLNZNAPONC
0B25:01004DDECBP
-rds;修改ds中的值
DS0B25
:0b24
-rcs;修改cs中的值
CS0B25
:0b26
-r修改cx中的值,即载入3f个字节
CX0000
:3f
-r
AX=0000BX=0000CX=003FDX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B24ES=0B25SS=0B25CS=0B26IP=0100NVUPEIPLNZNAPONC
0B26:010043INCBX
;设置好后的结果如上。
-ntest.exe
-r
AX=0000BX=0000CX=003FDX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B24ES=0B25SS=0B25CS=0B26IP=0100NVUPEIPLNZNAPONC
0B26:010043INCBX
-l
-ucs:100
0B92:0100E83200CALL0135
0B92:01037312JNB0117
0B92:010583C703ADDDI,+03
0B92:0108FEC8DECAL
0B92:010A75F1JNZ00FD
0B92:010C2ECS:
0B92:010DC706B2900800MOVWORDPTR[90B2],0008
0B92:0113B4FFMOVAH,FF
0B92:0115EB14JMP012B
0B92:011726ES:
0B92:01188A65FFMOVAH,[DI-01]
0B92:011BB002MOVAL,02
0B92:011D26ES:
0B92:011E8B15MOVDX,[DI]
-r
AX=0000BX=0000CX=0019DX=0000SP=0000BP=0000SI=0000DI=0000
DS=0B82ES=0B82SS=0B92CS=0B92IP=0000NVUPEIPLNZNAPONC
0B92:0000B82000MOVAX,0020
-uds:100
0B82:0100B82000MOVAX,0020
0B82:01038ED8MOVDS,AX
0B82:0105BB0000MOVBX,0000
0B82:0108B80000MOVAX,0000
0B82:010BB9FF00MOVCX,00FF
0B82:010E8907MOV[BX],AX
0B82:011043INCBX
0B82:011140INCAX
0B82:0112E2FALOOP010E
0B82:0114B8004CMOVAX,4C00
0B82:0117CD21INT21
0B82:01190000ADD[BX+SI],AL
0B82:011BB9FF00MOVCX,00FF
0B82:011E8907MOV[BX],AX
在这我有两个疑问:
1、为什么默认加载的内在地址是ds:100而不是资料中的cs:100
2、一开始没有加载文件时,寄存器段的内容都一样,而加载后,为什么会改变呢?且四个都改变了
不仅如此,内容加载到了新指向的地址,而没有加载到旧的地址上,又是为什么啊?不解
===========================================
-ntest.exe
-l0b23:0
^Error
-lcs:110
^Error
-lds:100
^Error
-lcs:100
-ucs:100
0B92:0100E83200CALL0135
0B92:01037312JNB0117
0B92:010583C703ADDDI,+03
0B92:0108FEC8DECAL
0B92:010A75F1JNZ00FD
0B92:010C2ECS:
0B92:010DC706B2900800MOVWORDPTR[90B2],0008
0B92:0113B4FFMOVAH,FF
0B92:0115EB14JMP012B
0B92:011726ES:
0B92:01188A65FFMOVAH,[DI-01]
0B92:011BB002MOVAL,02
0B92:011D26ES:
0B92:011E8B15MOVDX,[DI]
========================================
上面看到,我用带有address参数的l命令,
是我写的参数不正确,还是什么原因。求解释一下,大虾们!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:18:27 | 显示全部楼层
刚想到了一点,数据是存在了CS:0处,所以用DS:100刚好也指向了这个地方。所以有这样的结果。
但是,不是默认地是存在ds:100处吗,即使用了lcs:100也是存在了cs:0处呢?
回复

使用道具 举报

千问 | 2021-1-27 06:18:27 | 显示全部楼层
1、资料有错
2、你加载的是EXE文件,加载EXE文件DEBUG要自动处理很多事,因此寄存器会变,你加载一个非EXE文件就知道有什么不同了
回复

使用道具 举报

千问 | 2021-1-27 06:18:27 | 显示全部楼层
网上的资料全是这么说的(不过都转自一个地方);我试试吧,先谢过。
但l命令的address参数是怎么用的啊?
回复

使用道具 举报

千问 | 2021-1-27 06:18:27 | 显示全部楼层
l100001
读取A盘(第一个0,1表示B盘,类推)的第一个扇区(第2个0,1表示第2个扇区,类推)起的1个扇区(1,读取扇区数)到DS:100处
或者
nxxxx.bin
l2000
读取当前目录下的xxxx.bin到DS:2000中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行