Debug的基本使用()
<p>Debug是一个通过操作系统(os)对cpu寄存器进行访问用于学习汇编的程序,但是如今的win10(64位)已经不支持cmd打开debug,但是我们可以通过DOSBOX模拟器对其进行访问。</p><p> 安装方法:先在https://www.dosbox.com中下载dosbox(默认路径在C:\Program Files (x86)),接下来在网上下载debug.exe,为了方便可以直接在D盘下创一个Debug文件夹放到里边即可。接下来修改一下DOSBox 0.74-3 Options.bat里的路径,把最后的路径挂到</p>
<p>MOUNT C D:\DebugC:debug</p>
<p>中即可打开Dosbox。</p>
<h2>debug 的基本用法</h2>
<table><tbody><tr><th>debug 基本指令</th><th>指令全称</th><th>用法</th><th>用途</th></tr><tr><td>?</td><td>----------</td><td>?</td><td>显示debug的命令列表</td></tr><tr><td>A</td><td>assemble</td><td>A [ address ]</td><td>将输入源程序的指令汇编成目标代码并从指定的地址单元开始存放。若省缺起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要用于小段程序的汇编或对目标程序的修改</td></tr><tr><td>C</td><td>compare</td><td>C range address</td><td>比较内存的两个部分</td></tr><tr><td>D</td><td>dump</td><td>D [ range ]</td><td>显示部分内存的内容</td></tr><tr><td>E</td><td>enter</td><td>E address [ list ]</td><td>从指定地址开始,将数据输入</td></tr><tr><td>F</td><td>fill</td><td>F range list</td><td>使用指定值填充一段内存</td></tr><tr><td>G</td><td>go</td><td>G [ = address ] [ addresses ]</td><td>运行在内存中的可执行文件</td></tr><tr><td>H</td><td>hex</td><td>H value1 value2</td><td>执行十六进制运算</td></tr><tr><td>I</td><td>input</td><td>I port</td><td>显示来自特定端口的 1 字节值</td></tr><tr><td>L</td><td>load</td><td>L [ address ] [ firstsector ] [ number ]</td><td>将文件或磁盘扇区内容加载到内存</td></tr><tr><td>M</td><td>move</td><td>M range address</td><td>复制内存块中的内容</td></tr><tr><td>N</td><td>name</td><td>N [ pathname ] [ arglist ]</td><td>指定 Debug l(加载)或 w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数</td></tr><tr><td>O</td><td>output</td><td>O port byte</td><td>向输出端口发送 1 个字节的值</td></tr><tr><td>P</td><td>proceed</td><td>P [ =address ] [ number ]</td><td>执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪</td></tr><tr><td>Q</td><td>quit</td><td>Q</td><td>退出 debug会话,不保存当前测试文件</td></tr><tr><td>R</td><td>register</td><td>R [ register ]</td><td>若给出寄存器名,则显示该寄存器的内存并可进行修改。缺省寄存器名,则显示所有寄存器的内容及当前值( 不能修改 )</td></tr><tr><td>S</td><td>search</td><td>S range list</td><td>在部分内存中搜索一个或多个字节值的模式</td></tr><tr><td>T</td><td>trace</td><td>T [ =address] [ value ]</td><td>执行一条指令,然后显示所有寄存器的内容、所有标志的状态和Debug下一步要执行的指令的解码形式</td></tr><tr><td>U</td><td>unassemble</td><td>U [ range ]</td><td>反汇编字节并显示相应的原语句</td></tr><tr><td>W</td><td>write</td><td>W [ drive ] [ firstsector ] [ number ]</td><td>将测试文件写入磁盘</td></tr><tr><td>XA</td><td>allocate expanded memory</td><td>XA [ # pages ]</td><td>分配扩展内存</td></tr><tr><td>XD</td><td>deallocate expanded memory</td><td>XD [ handle ]</td><td>释放扩展内存</td></tr><tr><td>XM</td><td>map expanded memory pages</td><td>XM [ Lpage ] [ Ppage ] [ handle ]</td><td>映射扩展内存页</td></tr><tr><td>XS</td><td>display expanded memory status</td><td>XS</td><td>显示扩展内存的状态</td></tr></tbody></table>
<p>以上便是debug的简介。</p>
<p>学习汇编语言并且调用debug调试的时候,主要使用到 -L -U -D -G -T -P 指令</p>
<p>-L 装入 -G 运行 -U 反汇编 -T 单步(可以进入子程序) -P 单步(不进入子程序)-D 查询内存</p>
<h3>汇编语言程序建立步骤:</h3>
<ol><li>edit 建立源文件 格式:edit xxx.asm ( 必须以 asm 为扩展文件名,否则不能使用 masm 调用 ),生成 obj 文件。</li><li>masm 生成链接文件 格式:masm xxx.asm 然后生成 obj 文件,obj 文件是可连接文件,接下来需要使用link链接文件生成exe</li><li>link 生成 exe 文件 格式:link xxx.obj 生成 exe 可执行文件</li></ol>
<h3>接下来我们进行一些基本的操作</h3>
<p> -r 命令查看,改变cpu寄存器内容</p>
<p> -d 查看内存中的内容</p>
<p> -e 命令改写内存中的内容</p>
<p> -u 将机器指令翻译为汇编指令</p>
<p> -t 执行下一条指令</p>
<p> -a 以汇编指令方式写入一条机器指令</p>
<h3>首先介绍一下基本内容,看下初始配置:</h3>
<p> 看这些寄存器的名称应该都是8086的寄存器名称2333</p>
<p> 在电脑(CISC)的cpu指令由pc(cs段地址和ip偏移地址往地址总线传输地址)控制,因此我们可以修改cs和ip值对pc进行操作。</p>
<p> CS:代码段寄存器i ES:额外的寄存器</p>
<p> DS:数据段寄存器 (A-D)X:普通寄存器</p>
<p> SS:堆栈段寄存器 SP:堆栈寄存器</p>
<p> BP:基址寄存器 DI:变址寄存器</p>
<p> SI:源址寄存器</p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164243.png" /></p>
<p> 修改cs,ip地址(-r cs||ip),dosbox里默认是2个字节16位,即4个十六进制表示:</p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164244.png" /></p>
<p> 执行下一条指令(-t),可发现ip+=3,占了三个字节,在-d查看一下内存:</p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164245.png" /></p>
<p> 下面我们随意用-a来操作一下(输入命令):</p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164246.png" /> </p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164347.png" /></p>
<p> 然后修改cs:ip往下执行......:</p>
<p> <img alt="" src="https://img.jbzj.com/file_images/article/202308/2023080119164348.png" /></p>
<p> 按quit即可退出,以上就是debug的基本汇编操作用法,观看愉快!!!</p>
<div class="art_xg">
</div>
</div>
<!--endmain-->
頁:
[1]