赞
踩
注意cs和ip的值。图中cs=073F,ip=0100,也就是说,内存073F:0100处的指令为CPU当前要读取、执行的指令。在所有寄存器的下方,debug还列出了CS:IP所指向的内存单元所存放的机器码,并将它翻译为汇编语言。
可以看出,CS:IP所指向的内存单元为073F:0100,此处存放的机器码为0000,对应的汇编指令为 ADD [BX+SI],AL,就是把AL的值与[BX+SI]相加然后将结果放到DS:[BS+SI]中。图中DS:0000=CD,DS:0000就是DS这个数据段的偏移量0000的地址,[0000]就是进阶寻址这个数据,看到的是CD。
比如修改寄存器AX中的值,用r命令后加寄存器名来进行,输入“r ax”后回车,将出现“:”作为输入提示,在后面输入要写入的数据后回车,即完成AX中内容的修改,再次使用r命令可查看修改后的结果。图中将AX中的值0000修改为1111。
将直接列出debug预设地址处的内容。
如查看内存10000H处的内容,首先将这个地址表示为“段地址:偏移地址”的格式,可以是“1000:0”。
使用“d 段地址:偏移地址”的格式,debug将列出从指定内存单元开始的128个内存单元的内容。
最左侧是每行的起始地址以逻辑地址的形式给出。
中间是从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出是从16的整数倍的地址开始,最多输出16个单元的内容。中间的“-”将每行的输出分为两部分,便于查看。
右边是每个内存单元中数据对应的可显示的ASCII码字符。没有对应可显示的字符就用“.”来替代。
注意内存中的内容,在不同的计算机中是不一样的,也可能每次使用debug看到的内容都不相同,因为使用debug看到的都是原来就在内存中的内容,这些内容会因为系统环境的变化发生变化。
指定d命令的查看范围,采用“d 段地址:偏移地址 结尾偏移地址”的格式:
比如查看1000:0~1000:9中的内容,可以用“D 1000:0 9”来实现。
用debug的e命令改写内存中的内容:
可以使用e命令来改写内存中的内容,比如要将内存的1000:0~1000:9单元中的内容分别写为0,1,2,3,4,5,6,7,8,9,可以使用“E 起始地址 数据 数据 数据 ……”的格式来进行。
采用提问的方式来一个一个的修改内存中的内容:
输入 e 1000:10 ,回车,debug显示起始地址1000:0010和第一个单元的原始内容:00,然后光标停在“.”后面提示想要写入的数据,此时可以有两种选择:其一输入数据(此时输入的是“1”)然后按空格键,即用输入的数据改变当前的内存单元;其二不输入数据直接按空格键,则不对当前内存单元进行改写。
希望所有的改写内存单元改写完毕后回车,e命令操作结束。
可以用e命令向内存中写入字符或字符串:
同样也可以用e命令向内存中写入字符串,比如,用e命令从内存1000:0开始写人:数值1,字符串“a+b”、数值2、字符串“c++”,结果如图所示:
用e命令将机器码写入内存:
比如想要从内存1000:0单元开始写入这样一段机器码:
b80100 mov ax,0001
b90200 mov cx,0002
01c8 add ax,cx
可用下图方式进行:
用u命令查看写入或内存中原有的机器码所对应的汇编指令,u命令为反汇编指令。
可以用u命令将从1000:0开始的内存单元中的内容翻译为汇编指令,并显示出来:
首先用e命令向内存1000:0开始的内存单元中写入了8个字节的机器码;
然后用d命令查看内存1000:0~1000:1f中的数据;
最后用u命令查看从1000:0开始的内存单元中的机器指令及其所对应的汇编指令。
u命令的输出分为三部分,包括每一条机器指令的地址、机器指令、机器指令所对应的汇编指令。
由此可以看出内存中的数据和代码没有任何区别,关键在于如何解释。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。